2017-04-25 86 views
1

我有用戶類,它有一些額外的屬性:@ManyToMany和更新實體

@Entity 
@Table(name="\"user\"") 
public class User implements UserDetails { 
    private String username; 
    private String password; 
    @ManyToMany(fetch = FetchType.EAGER) 
    private Collection<House> houses; 
} 

現在,如果我調用某種改變所述房屋中的一個(例如改變它的名稱屬性)方法,我仍然如果我撥打:

User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
user.getHouses(); <- value of name property in house is not updated 

如何確保始終更新?

+0

我不認爲這是一個好主意,保存更改值安全上下文。但是如果你堅持使用Hibernate,你可以搜索二級緩存。 (只是一個建議,我沒有啓用此緩存之前)。 – PWC

回答

0

我建議你將@ManyToMany(fetch = FetchType.EAGER)更改爲@ManyToMany(fetch = FetchType.LAZY)。因爲EAGER在您第一次調用它時立即獲取對象,而在LAZY中您擁有該ID並且您將按需求獲取,這意味着,懶惰的數據將從數據庫獲取對象的最後一個狀態。

0

你缺少一些細節,根據您提供的信息:

級聯的缺失,也有各類級聯類型,爲簡單起見,讓我們假設你想在用戶的每次改變實體將對相關實體產生影響,因此您必須添加Cascade.all

那麼您的@JoinTable@JoinCoumn怎麼樣?它也沒有在你的實體關係中定義。