用于非识别关系的Hibernate代码生成

时间:2015-02-24 10:12:42

标签: java eclipse hibernate hibernate-tools

我有以下表结构,

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

TableB具有复合主键(bid,tid,mid)

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

当我尝试使用hibernate工具通过在eclipse中添加代码来生成代码时,我得到的错误是“外键(TableA [TableB_TableBId])必须具有与主键引用的列数相同的列(TableB [bid,tid,mid] ]“

由于这是一种非识别关系,我不想在TableA中添加其他列(tid和mid)。

有没有办法为这种情况生成代码。

我在生成时是否缺少任何其他配置?

注意:我使用的是eclipse juno(1.5.0.20120614-1633)和Hibernate Tools“3.6.0.Final-v20130327-1513-B111”

更新 尝试使用最新的Eclipse Luna,甚至没有创建连接“读取模式错误:'没有连接可用时必须设置'hibernate.dialect'”即使我已经设置了方言

1 个答案:

答案 0 :(得分: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);

这是Pojos

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从数据库中生成Pojos。让我知道我是否遗漏了您的问题。