簡體   English   中英

單向一對多,父級具有復合密鑰

[英]Unidirectional one to many, parent has composite key

我需要在父母與孩子之間創建一對多映射。 父級具有嵌入式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生成的查詢試圖使用“ Child”表中不存在的“ childId3”列運行查詢。

試試看

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM