2015-02-24 23 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