[英]JPA entity's collection members get detached or not managed
TGIF伙計們,但我仍然停留在我的一個項目上。 我有兩個接口IMasterOrder
和IOrder
。 一個IMasterOrder
可以具有收藏IOrder
。 因此,可以有幾個實現接口的MasterOrder
實體類和Order
實體類。
為了簡化編碼,我在各處創建了IMasterOrder
和IOrder
對象,但是當需要指定具體類型時,只需將IMasterOrder
對象轉換為類類型。
問題是,這使主類始終對其訂單返回null。 我對JPA一般如何與多態一起工作感到很好奇?
抱歉給您帶來的混亂。 其實問題要簡單得多
實際上,實體類是這樣的
public class MasterOrder implements IMasterOrder {
// Relationships
@OneToOne(mappedBy = "masterOrder")
private OrderCustomFields customFields;
@OneToMany(mappedBy = "masterOrder")
private List<OrderLog> logs;
@OneToMany(mappedBy = "masterOrder")
private Collection<Order> orders;
// Fields...
獲取主訂單實體實例的finder方法是這樣的
public static MasterOrder findMasterOrder(String id) {
if (id == null || id.length() == 0) return null;
return entityManager().find(MasterOrder.class, id);
}
但是,此finder方法中的MasterOrder實例返回customFields以及所有均為null的日志和訂單。 那么如何解決呢? 提前致謝。
當您訪問日志和訂單時,Master仍然是活動持久性上下文的一部分嗎? 即:找到或清除了發現主實體的EntityManager嗎? 如果是,則一切正常。
對於傻笑,您可以嘗試將日志和訂單的fetch屬性更改為EAGER ...這將有助於查明是否還有其他不良情況。
@OneToMany(mappedBy = "masterOrder", fetch = FetchType.LAZY)
private List<OrderLog> logs;
@OneToMany(mappedBy = "masterOrder", fetch = FetchType.LAZY)
private Collection<Order> orders;
聽起來好像是映射有問題。.我不認為空集合應該為NULL,它們應該不是空列表(如果已初始化),或者是從中讀取時將初始化的代理。 如果您離開事務並嘗試從集合中讀取數據,則應該拋出一個延遲的初始化異常。 無論哪種情況,都應在問題中包括所有相關的類別,以提供更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.