2013-04-03 73 views
1

我有@OneToMany JPA與具有WorkExperience的多個實例的Curriculum實例的關聯。在該實體本身之前堅持/保存JPA實體的關係

Curriculum JPA實體:

@Entity 
public class Curriculum { 
    ... 
    @OneToMany 
    private Set<WorkExperience> workExperiences; 
    ... 

WorkExperience JPA實體:

@Entity 
public class WorkExperience { 
... 

我本來想與其一起WorkExperiences堅持課程的persist方法之一EntityManager的電話。

然而,鑑於我是如何設計的Web UI的操作流程,我現在想另一種情況是否可能無法即:

  • 堅持的WorkExperiences到數據庫,然後再當用戶填寫的主要課程實體的細節,以:

  • 設置(已在DB)現有WorkExperience實例課程實例(不以dB爲單位尚)和

  • 持續整個對象圖:課程w^ith工作經驗。

這有道理嗎?我想到了幾個缺點,例如如果用戶選擇不堅持Curriculum實例會發生什麼?如何清理WorkExperience表中的懸掛線?

是否有替代品或更好的模式?例如,在用戶驗證表單之前預先保存課程實例是個好主意嗎?

回答

2

我會在Curriculum上定義一個級聯,因爲WorkExperience似乎是一個依賴實體。

然後在UI /控制器中使用新的/分離的實體,直到用戶決定提交(最後一個)表單。然後堅持Curriculum和相關的WorkExperience實體將在相同的事務提交期間保持。

@OneToMany(cascade=CascadeType.ALL) 
private Set<WorkExperience> workExperiences; 
+0

感謝您的回覆Kostja。好的,但我在哪裏可以在課程最終保存之前存儲WorkExperience的獨立實例? – balteo

+0

@balteo將它們放入獨立課程實體內的'Set'中,所以持久化將被級聯。我不熟悉Spring MVC,但是我認爲你有一個控制器用於實例化你的視圖,並且有一個處理表單提交的方法。這個控制器是我在堅持之前存儲課程實體的地方。對於用戶創建新實體的視圖,我通常在控制器的實例化過程中創建一個空實體,對其進行操作,然後在成功提交後保留它。 – kostja

+0

呃。 Spring MVC控制器是單身人士。將狀態置於Singleton中並不是一個好主意。我想過使用會話存儲,但它也不是一個好主意...... – balteo