簡體   English   中英

使用JPA在Hibernate中進行復合鍵聯接

[英]Composite key join in Hibernate with JPA

我在嘗試解決此問題時遇到了一些麻煩,但在Java和Google上都已走了這么遠。

我有兩個要加入的表。 它們都具有復合主鍵,並且子表在父級PK中具有相同的列,另外還有兩個。 在Java中,類看起來大致(忽略getter / setter等):

@Embeddable
public class ParentKey {
    private Date someDate;
    private String someKeyField;
}

@Embeddable
public class ChildKey {
    private Date someDate;
    private String someKeyField;
    private String anotherKeyField;
}

我正在嘗試基於java.util.DateString來查詢Parent。 理想情況下,它會熱切地獲取在someDatesomeKeyField上連接的Set<Child>

我已經了解到它可以為父級提取數據了,但是后來它與ORA-01858: a non-numeric character was found where a numeric was expected一起ORA-01858: a non-numeric character was found where a numeric was expected在提取子級時需要ORA-01858: a non-numeric character was found where a numeric was expected 我認為它有事情做與java.util.Date領域,但我真的不知道是什么。

這兩個實體類如下所示:

@Entity
public class Parent {

    @EmbeddedId
    private ParentKey key;

    @OneToMany(fetch = EAGER, mappedBy = "parent")
    private Set<Child> children;

    private String someData;
    // more data
}

@Entity
public class Child {

    @EmbeddedId
    private ChildKey key;

    @ManyToOne
    @JoinColumn({
        @JoinColumn(name = "SOME_DATE", insertable = false, updatable = false),
        @JoinColumn(name = "SOME_KEY_FIELD", insertable = false, updatable = false),
    })
    private Parent parent;

    private String someChildData;
    // more data
}

父表和子表都具有“ SOME_DATE”(日期類型)和“ SOME_KEY_FIELD”(vachar2類型)列。 我可以看到Hibernate在打印查詢時嘗試第二個查詢,因此它找到了一些父母並試圖尋找孩子。

我可能在上面做了一些錯誤的事情,但是我無法想象我所做的任何事情都會導致ORA-01858 即使我刪除了所有其他字段並僅堅持使用關鍵字段,也會遇到相同的錯誤,因此我感到Hibernate的操作出乎意料,我只是不知道該做什么。

有沒有更好的方式進行這樣的連接或組織我的@EmbeddedIds 我所做的事情有什么明顯的錯誤嗎?

編輯:我已經打印出查詢的綁定變量的孩子,它的綁定順序錯誤。 我認為,如果有一種方法可以指定父級中的字段以及它們綁定到的列,則將解決此問題。

在查看了顯示綁定變量的Hibernate調試后,很明顯,它沒有在子查詢(由Hibernate生成)中綁定正確的參數。 似乎有點隨機。

不過,在@JoinColumn批注中添加referencedColumnNames可以解決此問題。

暫無
暫無

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

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