我有User类,它有一些额外的属性:
@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 :(得分:0)
我建议您将@ManyToMany(fetch = FetchType.EAGER)
更改为@ManyToMany(fetch = FetchType.LAZY)
。因为EAGER在你第一次调用它时立即获取对象,并且使用LAZY你有id,你将按需求获取,这意味着,懒惰你将从数据库中获取对象的最后状态。
答案 1 :(得分:0)
根据您提供的信息,您遗漏了一些细节:
缺少级联,有各种级联类型,为简单起见,我们假设您希望对您的用户实体所做的每一项更改都会影响相关的实体,即House,所以你&#39 ;我必须添加Cascade.all
您的@JoinTable
和@JoinCoumn
怎么样?它也没有在你的实体关系中定义。