有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    试试看

     Child {
        private long childId1;
        private long childId2;
        private long childId3;
    }