操作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中的no session問題Session
- [20210520]關於主鍵索引問題.txt索引
- MySQL自增主鍵跳號問題MySql
- Hibernate 一個更新問題的 討論
- 使用Hibernate、JPA、Lombok遇到的有趣問題Lombok
- 主鍵的建立、新增、刪除操作
- oracle 序列值導致的主鍵衝突問題Oracle
- 記SqlSugar ORM框架之找不到主鍵問題SqlSugarORM框架
- 基於 Ionic 2 多主題、多租戶構建方案探索
- hibernate中多對多關係的維護
- VSCode遠端連線其他主機的WSL2的問題VSCode
- 解決Spring Data JPA Hibernate的N+1問題的最佳方法Spring
- 全新前端UI介面 WordPress模板主題開發進群V2主題 一鍵開關 多種引流方法 引私域二次變現前端UI
- 【MySQL】gh-ost改雙主表結構主鍵衝突問題MySql
- 6.Hibernate多對多關係建立
- Binder關鍵問題
- git 操作遇到問題Git
- 多程式問題
- Java操作hdfs出現的問題Java
- 多語言遇到的問題
- atxserver2 怎麼解決 server 多個網路卡的問題Server
- Hibernate最全面試題面試題
- hibernate學習筆記(2)筆記
- 使用 Hibernate 和 H2 的多租戶Spring Boot開源原始碼專案Spring Boot原始碼
- 解決HIbernate分頁問題獲取表總行數的小Bug
- Rancher 2022 關鍵主題與新年展望
- 關於操作駁回遇到的問題
- Android夜間模式(多主題)探索Android模式
- 你可能忽略的多型問題多型
- Hibernate 基本操作、懶載入以及快取快取
- App 多區域皮膚(主題)的實現APP
- hibernate一對多、多對多的實體設計和配置檔案配置
- 主元素問題(C語言)C語言
- mysql主從同步問題整理MySql主從同步
- db2資料庫的操作以及一些常見問題解決DB2資料庫
- spring-data-jpa一對多、多對多雙向關聯,查詢操作的時候進入死迴圈問題Spring
- springboot 2 Hikari 多資料來源配置問題(dataSourceClassName or jdbcUrl is required)Spring BootJDBCUI
- Android多媒體之Camera2的相關操作Android
- 同文輸入法更換鍵盤主題