我還有點猶豫,這是處理em.remove(entity)
的最佳實踐,這個實體位於JPA中使用mappedBy
映射的多個集合中。移除有關mappedBy集合的實體的最佳實踐?
考慮像Property
引用其他三個實體的實體:一個Descriptor
,一個BusinessObject
和Level
實體。在Property實體中使用@ManyToOne
並在其他三個對象中使用@OneToMany(mappedBy...)
來定義映射。該反映射被定義是因爲在某些情況下我需要訪問這些集合。
每當我使用em.remove(prop)
刪除一個屬性時,該元素不會自動從其他三種類型的管理實體中刪除。如果我不關心這一點,並且下面的頁面加載(webapp)沒有重新加載這些實體,那麼該屬性仍然存在,並且可能會做出一些不再是真實的決定。
逆映射可能會變得相當大,雖然我不想使用類似descriptor.getProperties().remove(prop)
之類的東西,因爲它會加載所有那些可能在此之前已被延遲加載的屬性。
所以我目前首選的方法是刷新實體,如果它被管理:if (em.contains(descriptor)) em.refresh(descriptor)
- 它卸載一個可能加載的集合並在下一次訪問時觸發重新加載。
是否有另一種可行的方法來處理已加載實體的所有mappedBy集合?
感謝您的想法。因爲我的模型至今沒有引用一個EntityManager本身和Seam上下文是用來使用的持久性事件,對我來說可能有點棘手 - 刷新方式可能不會以這種方式工作。和附加()/刪除()對關聯集合將是大集合過於昂貴。 – 2010-04-09 06:55:06
我已經接受了解決方案,因爲它批准我的當前實現更多或更少。持久性事件的想法在某些情況下非常好用。 – 2010-04-19 07:18:05