[英]Hibernate composite key mapping issue
我正在嘗試通過映射表將相同類(MyData)的實體相互映射。 MyData具有復合主鍵(id1和id2)。 當我創建類時(見下文),似乎Hibernate正在反轉FK映射的順序(即a_id1指向b_id2,等等。。。)。 這似乎不正確。 inverseJoinColumns是否必須與joinColums的順序相反? 我在網上找不到很多帶有復合鍵的示例...
public class MyData {
// has composite key (id1, id2)
// ... //
@ManyToMany
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
@JoinTable(name = "MyData_foo",
joinColumns = {
@JoinColumn(name = "a_id1"),
@JoinColumn(name = "a_id2")
},
inverseJoinColumns = {
@JoinColumn(name = "b_id1"),
@JoinColumn(name = "b_id2") })
)
private Set<MyData> mySet = new HashSet<MyData>();
// ... //
}
CREATE TABLE `MyData_foo` (
`b_id2` bigint(20) NOT NULL default '0',
`b_id1` bigint(20) NOT NULL default '0',
`a_id2` bigint(20) NOT NULL default '0',
`a_id1` bigint(20) NOT NULL default '0',
PRIMARY KEY (`a_id1`,`a_id2`,`b_id1`,`b_id2`),
KEY `FKCD44188BB2B7A1BE` (`b_id1`,`b_id2`),
KEY `FKCD44188B7997E326` (`a_id1`,`a_id2`),
CONSTRAINT `FKCD44188B7997E326` FOREIGN KEY (`a_id1`, `a_id2`) REFERENCES `MyData` (`b_id2`, `b_id1`),
CONSTRAINT `FKCD44188BB2B7A1BE` FOREIGN KEY (`b_id1`, `b_id2`) REFERENCES `MyData` (`a_id2`, `a_id1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
您的映射錯誤。 您需要在所有JoinColumn批注中添加“ referencedColumnName”,例如
@JoinTable(name = "MyData_foo",
joinColumns = {
@JoinColumn(name = "a_id1", referencedColumnName = "id1"),
@JoinColumn(name = "a_id2", referencedColumnName = "id2")
},
inverseJoinColumns = {
@JoinColumn(name = "b_id1", referencedColumnName = "id1"),
@JoinColumn(name = "b_id2", referencedColumnName = "id2")
})
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.