2015-02-24 88 views
1

我有以下的表結構,Hibernate代碼生成用於非識別關係

TableA: 
aid int, (PK) 
name varchar(255), 
bid 

表B是具有複合主鍵(BID,TID,中旬)

TableB: 
bid int, (PK) 
tid int, (PK) 
mid int, (PK) 
name varchar(255) 

當嘗試生成代碼使用休眠工具,通過在eclipse中添加它我得到的錯誤,「外鍵(TableA [TableB_TableBId])必須具有相同數量的列由主鍵引用(TableB [bid,tid,mid]」

由於這是一種非識別關係,我不想在TableA中添加其他列(tid和mid)。

有沒有辦法爲這種場景生成代碼。

我是否在生成時缺少其他配置?

注:我使用的Eclipse JUNO(1.5.0.20120614-1633)和Hibernate工具 「3.6.0.Final-v20130327-1513-B111」

更新: 試圖用最新的Eclipse紅月,有即使連接沒有得到創建「閱讀架構錯誤:'hibernate.dialect'必須設置時沒有連接可用」即使我已經設置方言

回答

0

我用Hibernate工具任務生成代碼爲您的表和pojos是按預期生成。

Create Table Table1(
aid integer, 
name varchar(255), 
PRIMARY KEY (aid)); 

Create Table Table2(
bid integer, 
tid integer, 
mid integer, 
name varchar(255) 
PRIMARY KEY (bid,tid,mid)); 

ALTER TABLE Table2 ADD CONSTRAINT fk_rel FOREIGN KEY (bid) REFERENCES Table1(aid); 

這裏是POJO的

public class Table1 implements java.io.Serializable { 
    private int aid; 
    private String name; 
    private Set<Table2> table2s = new HashSet<Table2>(0); 
    //getters and setters 
} 

public class Table2 implements java.io.Serializable { 
    private Table2Id id; 
    private Table1 table1; 
    private String name; 
    //getters and setters 
} 

public class Table2Id implements java.io.Serializable { 
    private int bid; 
    private int tid; 
    private int mid; 
    //getters and setters 
} 

您可以使用此GitHub project生成的POJO出Database.Let的我知道,如果我錯過了你的問題什麼。

+0

謝謝你的回答,我正面臨着這個問題與非識別關係,所以爲此,我只需要一個主鍵(3)從table2被引用在table1 – 2015-07-12 16:15:47

+0

休眠它是不可能的當字段是組合鍵的一部分時,生成非標識關係。但我有一個解決方法,你必須準備你的HBM文件沒有組合鍵,只有非識別關係,並生成POJO的HBM。通過這種方式,您可以在pojo級別識別關係,並在DB層具有實際關係。 – 2015-07-13 06:02:18