簡體   English   中英

JPA實體的集合成員分離或不受管理

[英]JPA entity's collection members get detached or not managed

TGIF伙計們,但我仍然停留在我的一個項目上。 我有兩個接口IMasterOrderIOrder 一個IMasterOrder可以具有收藏IOrder 因此,可以有幾個實現接口的MasterOrder實體類和Order實體類。

為了簡化編碼,我在各處創建了IMasterOrderIOrder對象,但是當需要指定具體類型時,只需將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.

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