2016-06-12 71 views
0

將更改保存到實體我有一個實體User和實體UserPage 用戶不具有UserPage當你創建了他
現在我想創建一個userpage並將其分配給用戶。這看起來是這樣的:如何使用JPA

UserPage page= new UserPage([Attributes here]); 
User user; (this is a User previously created, persisted and now fetched) 

現在我執行以下操作:

user.setUserPage(page); 
userPageEJB.persist(page); 
現在

,當我想獲取用戶的userPage,我做的:

User user= userEJB.getUserByID([userID here]); 
UserPage page= user.getUserPage(); 

現在的問題是,這些更改似乎沒有保存(最後一行代碼總是返回null)。如何保存它們以便我可以獲取特定用戶的頁面?

+0

顯示周邊代碼。所有這些都在同一個事務中運行嗎?如何管理? – chrylis

回答

0

如果User和UserPage具有父子關係,則使用CascadeType映射。使用這種映射JPA將改變實體狀態轉換成相應的DML語句:

class User{ 
@OneToOne(mappedBy = "user", 
    cascade = CascadeType.PERSIST) 
private UserPage userPage; 
.... 
} 
0

檢查的第一件事就是UserPage和用戶之間的關係的CascadeType的,你需要有至少一個CascadeType.PERSIST,你也可以使用CascadeType.ALL取決於你所做的關係的定義。第二件事是檢查您的代碼是否已在單個交易中執行(無論是BTM還是CTM)以確保所有修改都已刷新到數據庫。