[英]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.Date
和String
來查詢Parent。 理想情況下,它會熱切地獲取在someDate
和someKeyField
上連接的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.