我有兩個對象Customer和Transaction。他們看起來像這樣:如何加載id,但不包含ManyToOne映射中不存在的對象
@Entity
class Transaction {
@Id
long id;
@Column("CUSTOMER_ID")
long customerId;
@ManyToOne
@JoinColumn(name="CUSTOMER_ID", insertable=false, updatable=false, nullable=false)
Customer customer
...
}
@Entity
class Customer {
@ID
long id;
...
}
問題是我們使用假客戶號碼來識別某些類型的交易。這是一種傳統的做法,我無法做出任何改變,我的控制之外的其他各種過程依賴於此。
我希望能夠做的是獲得客戶號碼返回虛擬客戶交易,並在我的交易對象只有一個空客戶。對於不是虛擬客戶的交易,我希望設置客戶對象。理想情況下,我寧願不必測試虛擬客戶號碼併發出單獨的查詢。
如何編寫查詢並映射我的對象來執行此操作?現在我嘗試的所有事情,最終都會出現虛擬策略ID的EntityNotFound異常。
我正在使用hibernate。問題不在於CUSTOMER_ID爲空時,它不是null,而是不引用對象。我們擁有沒有相應客戶對象的特定虛擬客戶ID。正如我上面所說的,不幸的是,他們是一個遺留的人造物,我不能刪除,因爲其他進程和系統依賴它們。 – AndrewMcCall 2011-12-20 18:38:40
此問題特定於Hibernate使用代理實現延遲加載的方式,不使用代理的其他JPA實現不會遇到此問題。讓它成爲EAGER應該解決這個問題。 – James 2011-12-21 14:42:01
這並不是說實體在存在時不會被加載,而是工作正常。問題是當一個實體不存在時,當它是其中一個虛擬客戶時,它引發異常。 – AndrewMcCall 2011-12-23 18:15:33