0
第一次我在項目中使用persist()方法。使用JPA,我使用Hibernate作爲提供者。案件非常簡單。我有2個表使用JPA的persist()方法的瞬態異常..對實體持久性的懷疑..持續哪一方面?
- 公司 - COMPANY_ID(PK,序列),G_Company_id(也將是唯一的)
- CP_Doc - Chronicle_id(PK),COMPANY_ID(FK上述COMPANY_ID))
現在我有一些特定公司的CP_Docs。我已成功創建實體(爲createNativeQuery,JPA的createQuery工作)。我還提到了集合的cascade = CASCADE.ALL。
For persisting我寫下面的代碼。
Company company = new Company();
company.setGCompanyId(7);
for(/* Get all docs for a particular company having id = 7 */) {
CP_Doc cpDoc = new CP_Doc();
cpDoc.setChronicleId(/* some chronicle id from the loop */);
cpDoc.setCompany(company);
entityManager.persist(cpDoc);
}
表格之間的關係是一家公司可以有許多cp_docs。所以CP_Doc表是所有者表。我嘗試從CP_Doc一側繼續。我能否堅持公司實體一方?請幫助專家:)
嗨@Nizet,有輕微的錯誤,我在這部分「company.setGCompanyId糾正(7) ;」 可能有2種情況 - 1)G_Company_ID已經存在(例如在這種情況下7存在)。這裏是「company.getCPDocs()。add(cpDoc);」必要?我認爲它會隱式發生,因爲我們在此代碼中添加公司cpDoc「cpDoc.setCompany(company);」 2)當G_Company_id不在數據庫中 - 在這裏我們必須做一個新的公司()像我的問題中的代碼? (在find()失敗後) – abhihello123
1.這不是絕對必要的,但是如果你想要一個一致的對象圖,你必須自己維護它。例如,如果您繼續在同一個會話中使用該公司,並且希望在其集合中找到新的CPDoc,則它不會在該集合中。只有當您在新會話中從數據庫中重新加載公司時,它纔會在那裏。是的,如果公司不存在,則需要創建它並堅持它。 –
+1在答案中的明確解釋以及評論:) – abhihello123