2011-03-16 118 views
0

我有一個「銷售」實體,在實體被持久化之前,我想創建一個「收入」實體。我可以在會話bean中做到這一點,但如果將它封裝在Sale實體中,我會更好。所以,我可以這樣做:JPA實體堅持另一個實體

em.persist(sale); 

而且它會自動創建一個實體的收入,堅持它。

我不希望銷售與收入有關聯,因爲我可以將它們關聯起來並進行級聯持續。

這就好像銷售實體會創建Income實體的實例,然後調用EntityManager上的persist方法一樣,因爲這既不是可行的也不是一個好主意,我開始認爲它應該由EJB執行。意見?

+0

是否有一個理由,爲什麼你不喜歡直接從您的EJB的持久收入的實體?我不明白這會爲您提供什麼,除了讓其他人使用/維護您的代碼時可能更難以遵循的設計。 – Christina 2011-03-16 11:48:09

+0

@Christina,我不確定,我認爲如果是由Sale實體完成的話,它會從上層隱藏這種複雜性,這樣我就不必每次創建銷售時都要創建兩個實體。我對此沒有太多經驗,這不是一個好主意嗎? – arg20 2011-03-16 16:37:28

+1

Personnaly我不會這樣做,除非我有一個非常好的理由,因爲通常人們不希望實體這樣做的事情不尋常。如果您需要在代碼中的許多地方創建兩個實體,那麼您可以在您的EJB中始終擁有一個私有方法(如果需要從多個EJB調用它,甚至可以在一個助手類中)。這樣做的好處是,讀取代碼的人可以看到被調用的方法,並且可以看到它的作用,而不是依賴PrePersist註釋或類似的東西,大多數人不知道它們是否在那裏。 – Christina 2011-03-17 07:43:48

回答

0

您是否嘗試過@PrePersist註釋?

JPA prepersist

+0

是的,但這不會堅持實體,除非我將兩個實例關聯並執行級聯持續 – arg20 2011-03-16 16:35:19