java单向一对多,父级具有复合密钥
我需要在父对象和子对象之间创建一对多映射。家长有一个嵌入式id。我采用了这种方法,我得到:
编辑: 父表包含3列,它们是来自3个不同子表的外键
org.hibernate.AnnotationException: A Foreign key refering com.Parent from com.Child has the wrong number of column. should be 3
Parent {
@EmbeddedId
private ParentEmbeddedId id;
@OneToMany(fetch = FetchType.EAGER)
@JoinTable(name = "Child",
joinColumns = {
@JoinColumn(name="childId2"),
@JoinColumn(name="childId3")
},
inverseJoinColumns={
@JoinColumn(name="childId1")
})
private Collection<Child> children;
}
ParentEmbeddedId {
private long childId1;
private long childId2;
private long childId3;
}
Child {
private long childId1;
}
第二种方法:
使用以下映射也会产生上述相同的例外情况:
@OneToMany
@JoinColumn(name = "childId1")
private Collection<Child> children;
第三种方法:
@OneToMany
@JoinColumns({
@JoinColumn(name="childId1", referencedColumnName="childId1"),
@JoinColumn(name="childId2", referencedColumnName="childId2"),
@JoinColumn(name="childId3", referencedColumnName="childId3"),
})
private Collection<Child> Children
这导致
java.sql.SQLSyntaxErrorException: ORA-00904: "Child2_"."childId3": invalid identifier;
基本上,hibernate生成的查询试图使用“childId3”列运行查询,而“Child”表中不存在该列
# 1 楼答案
试试看