2011-09-27 81 views
0

我一直在爲此奮鬥一段時間,似乎無法解決問題。我有一個名爲SiteVisit的持久實體,它通過名爲SiteVistHasStaff的中間表與工作人員多對多相關。同時堅持兩個實體

使用NetBeans,CRUD和JSF我已經能夠填充這些表(使用三個CRUD頁)有意義的數據,並創建查詢員工等

但是顯示實地考察,以改善用戶界面,我這嘗試創建一個頁面,該頁面允許預訂SiteVisit並選擇將參加的員工,然後在提交頁面/表單時在SiteVist和SiteVisitHasStaff表中創建新記錄。

這似乎是一個簡單的現實世界的任務,但我似乎無法弄清楚我需要採取的步驟來實現它。我設法將數據放到selectManyMenu中的同一頁面上,但在嘗試提交我的選擇時失敗並出現持續性錯誤(網站訪問創建時沒有員工列表,但StaffVisitHasStaff記錄失敗,因爲SiteVisit沒有值ID字段)

我可以使用netbeans生成的CRUD創建方法,因爲我重複使用代碼時感覺像正確的方式,但我的想法是否定的,因爲它們使用不同的EntityManagers,並且不知道彼此。我是否需要創建一個新的bean(我嘗試過這種方法失敗了),並創建了一個新的外觀來處理這個需求?或者這與我的實體定義有關。

@OneToMany(cascade = CascadeType.ALL, mappedBy = "siteVisitIdsiteVisit") 
private List<SiteVisitHasStaFF> siteVisitHasStaffList; 

@JoinColumn(name = "site_visit_idsite_visit", referencedColumnName = "idsite_visit") 
@ManyToOne(optional = false) 
private SiteVisit siteVisitIdsiteVisit; 

誰能幫助或點我演示如何做到這一點我用Google搜索,閱讀和嘗試了很多事情,我只是完全混淆的例子的方向。 感謝您提供任何幫助。

+1

可能想嘗試在'@ ManyToOne'上添加至少'cascade = CascadeType.PERSIST' – TC1

+0

嘗試過但仍然存在相同的持續性錯誤。我現在確實知道,在嘗試添加SiteVisitHasStaff實體之前,我嘗試添加SiteVisitHasStaff實體時,新創建的SiteVisit未返回ID。我想我應該看看某種刷新方法,NetBeans CRUD嚮導似乎並不認爲他是必要的,因爲我是新手,我只是假設我應該可以使用提供的工具來完成這項工作。我不確定沖洗方法應該在哪裏。 AbstractFacade可能? – user845854

+0

我沒有得到你的問題,但我會建議你不要使用這個嚮導代碼生成器,至少在你知道Hibernate是如何工作的前提下,因爲你不可能對它進行故障排除,因爲你不知道代碼(自動),也沒有很多與休眠的經驗。 –

回答

1

那麼,只是在黑暗中的一槍,我不是堅定與Netbeans/CRUD /任何,但以什麼順序你堅持你的實體和哪個持續性錯誤你準確嗎?

我記得,如果你有兩個不同的實體經理,最初他們不知道另一個持有的實體。另外,你必須堅持要引用它。因此,如果一個EM持久存在,那麼該實體將只抵抗其持久性上下文,直到everyting被提交爲止(事務結束,刷新,...)。另一個EM不會自動檢測到該實體,這就是merging entities的用途。

不知道什麼適用於您的情況,但我會在一個範圍內對所有操作使用一個EM,或將要使用的實體合併到另一個EM中。