操作hibernate多主鍵的問題?(2)
關於多主鍵的操作,又出現了以下問題,請大家指教:
現在我的資料庫有個表reservation(暫叫主表)和另外兩個表person,flight(暫叫從表)關聯,reservation有三個主鍵,
(reservation_id,person_id_fk,flight_id_fk),其中person_id_fk,flight_id_fk同時也是外來鍵,關聯person,flight表。
我把我的hbm,value object class,主鍵類,呼叫方法貼出來:
reservation.hbm.xml: mapping 檔案
<hibernate-mapping>
<class
name="airline.hibernate.Reservation"
table="reservations"
>
<composite-id name="comp_id" class="airline.hibernate.ReservationPK">
<key-property name="reservationId" column="reservation_id" type="int" />
<key-property name="personIdFk" column="person_id_fk" type="int" />
<key-property name="flightIdFk" column="flight_id_fk" type="int" />
</composite-id>
.............
.........
.......
</class>
</hibernate-mapping>
Reservation.java:持久類
package airline.hibernate;
import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
/** @author Hibernate CodeGenerator */
public class Reservation implements Serializable {
/** identifier field */
private airline.hibernate.ReservationPK comp_id; //主鍵類
/** persistent field */
private java.util.Date registrationUtc;
/** nullable persistent field */
private String comment;
//其他列的定義
.......
.......
.......
}
ReservationPK.java : 主鍵類
package airline.hibernate;
import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
/** @author Hibernate CodeGenerator */
public class ReservationPK implements Serializable {
private int reservationId;
private int personIdFk;
private int flightIdFk;
......
.....
.....
equasl(){
.....
}
hashCode(){
......
}
}
測試方法:
public void testAddRe() throws HibernateException{
Person person = testLoadPerson(); //load person
Flight flight = testLoadFlight(); //load flight
ReservationPK compid = new ReservationPK();
compid.setReservationId(100);
compid.setPersonIdFk(1); //personID既是主鍵也是外來鍵
compid.setFlightIdFk(100); //flightID既是主鍵也是外來鍵
Reservation re = new Reservation();
re.setComp_id(compid);
re.setRegistrationUtc(new java.util.Date());
re.setComment("love yo1");
re.setFlight(flight);
re.setPerson(person);
Session s = sessionFactory.openSession();
Transaction tx = null;
try{
tx = s.beginTransaction();
s.save(re,compid); //or s.saveOrUpdate(re);
try{
tx.commit(); //commit是丟擲 ArrayIndexOutOfBoundsException異常
}catch (ArrayIndexOutOfBoundsException abe) {
abe.printStackTrace() ;
}
}catch(HibernateException he){
if ( tx!=null ){
tx.rollback();
}
throw he;
}finally{
s.close();
}
}
以上主表的delete,load均沒問題.load 如下:
re = (Reservation)s.load( Reservation.class, compid );
但是在save和saveOrUpdate()使出現異常,打出的hql語句如下:
insert into reservations (registration_utc, comment, reservation_id, person_id_fk, flight_id_fk) values (?, ?, ?, ?, ?)
如果 person_id_fk,flight_id_fk 兩列不是外來鍵,只是普通的主鍵,則沒有任何問題。
請大家幫忙看一下
現在我的資料庫有個表reservation(暫叫主表)和另外兩個表person,flight(暫叫從表)關聯,reservation有三個主鍵,
(reservation_id,person_id_fk,flight_id_fk),其中person_id_fk,flight_id_fk同時也是外來鍵,關聯person,flight表。
我把我的hbm,value object class,主鍵類,呼叫方法貼出來:
reservation.hbm.xml: mapping 檔案
<hibernate-mapping>
<class
name="airline.hibernate.Reservation"
table="reservations"
>
<composite-id name="comp_id" class="airline.hibernate.ReservationPK">
<key-property name="reservationId" column="reservation_id" type="int" />
<key-property name="personIdFk" column="person_id_fk" type="int" />
<key-property name="flightIdFk" column="flight_id_fk" type="int" />
</composite-id>
.............
.........
.......
</class>
</hibernate-mapping>
Reservation.java:持久類
package airline.hibernate;
import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
/** @author Hibernate CodeGenerator */
public class Reservation implements Serializable {
/** identifier field */
private airline.hibernate.ReservationPK comp_id; //主鍵類
/** persistent field */
private java.util.Date registrationUtc;
/** nullable persistent field */
private String comment;
//其他列的定義
.......
.......
.......
}
ReservationPK.java : 主鍵類
package airline.hibernate;
import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
/** @author Hibernate CodeGenerator */
public class ReservationPK implements Serializable {
private int reservationId;
private int personIdFk;
private int flightIdFk;
......
.....
.....
equasl(){
.....
}
hashCode(){
......
}
}
測試方法:
public void testAddRe() throws HibernateException{
Person person = testLoadPerson(); //load person
Flight flight = testLoadFlight(); //load flight
ReservationPK compid = new ReservationPK();
compid.setReservationId(100);
compid.setPersonIdFk(1); //personID既是主鍵也是外來鍵
compid.setFlightIdFk(100); //flightID既是主鍵也是外來鍵
Reservation re = new Reservation();
re.setComp_id(compid);
re.setRegistrationUtc(new java.util.Date());
re.setComment("love yo1");
re.setFlight(flight);
re.setPerson(person);
Session s = sessionFactory.openSession();
Transaction tx = null;
try{
tx = s.beginTransaction();
s.save(re,compid); //or s.saveOrUpdate(re);
try{
tx.commit(); //commit是丟擲 ArrayIndexOutOfBoundsException異常
}catch (ArrayIndexOutOfBoundsException abe) {
abe.printStackTrace() ;
}
}catch(HibernateException he){
if ( tx!=null ){
tx.rollback();
}
throw he;
}finally{
s.close();
}
}
以上主表的delete,load均沒問題.load 如下:
re = (Reservation)s.load( Reservation.class, compid );
但是在save和saveOrUpdate()使出現異常,打出的hql語句如下:
insert into reservations (registration_utc, comment, reservation_id, person_id_fk, flight_id_fk) values (?, ?, ?, ?, ?)
如果 person_id_fk,flight_id_fk 兩列不是外來鍵,只是普通的主鍵,則沒有任何問題。
請大家幫忙看一下
相關文章
- 操作hibernate多主鍵的問題?
- 請教Hibernate的多主鍵操作如何實現?
- hibernate複合主鍵查詢問題
- [求助]Hibernate自增長主鍵的設定問題和事務問題
- Hibernate Blob 操作問題!
- 多對一(主鍵)關係,create問題
- Hibernate主鍵策略
- Hibernate 主鍵的生成策略
- 多對多的操作問題
- Hibernate 自定義主鍵
- hibernate主鍵生成策略
- Hibernate框架的主鍵生成策略框架
- Hibernate 多執行緒問題!執行緒
- hibernate 中使用hbm2java 的問題Java
- Hibernate 一對多配置 級聯操作(級聯失敗問題分析解決)
- Java Hibernate 主鍵生成10大策略Java
- Hibernate自定義產生主鍵方式
- HIBERNATE的自定義型別主鍵的對映??型別
- Hibernate的session問題Session
- 基於關鍵詞及問題主題的問題相似度計算
- MySQL自增主鍵跳號問題MySql
- 求助: 用Hibernate連線多個資料庫的問題?資料庫
- hibernate中的no session問題Session
- oracle 序列值導致的主鍵衝突問題Oracle
- MySQL5.5加主鍵鎖讀問題MySql
- mysql主從同步(2)-問題梳理MySql主從同步
- hibernate中blob大2進位制檔案的問題?
- 關於Hibernate一對多關聯儲存問題
- MySQL的主鍵和欄位型別問題總結MySql型別
- 資料庫自增主鍵可能產生的問題資料庫
- 注意:Oracle中的聯合主鍵查詢問題(轉)Oracle
- 1個主庫配置多個備庫的問題
- Hibernate的Criteria查詢問題。
- Hibernate 動態Update的問題
- Spring與hibernate的問題Spring
- hibernate 的lazy載入問題
- GoldenGate MSSQL Oracle的主鍵問題導致的錯誤GoSQLOracle
- 記SqlSugar ORM框架之找不到主鍵問題SqlSugarORM框架