我在嘗試解決這個問題時遇到了一些麻煩,但在Java和Google上都遇到了這個問題。使用JPA的休眠組合鍵加入
我有兩張表我想加入。它們都具有複合主鍵,並且子表在父級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
家長。理想情況下,他們熱切地拿到Set<Child>
加入someDate
和someKeyField
。
我已經知道它能夠爲父母提取數據了,但是在獲取子女時它會彈出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
?我在做什麼有什麼明顯的錯誤?
編輯:我已經打印出兒童查詢的綁定變量,它的綁定順序錯誤。我認爲,如果有一種方法可以指定父代的字段以及它們綁定的列,這將會被解決。
如果您設置了調試日誌記錄,那麼您是否收到有關該消息的更多信息? – 2015-02-06 20:42:19