使用Hibernate 5和Spring 4
请参考以下代码以及两个实体之间的映射:
User类
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user")
private TruckOwner truckOwner;
//以下是getter和setter方法
TruckOwner类
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;
//以下是getter和setter
当我的代码尝试更新user
类中的值,例如下面的代码:
UserServiceImpl类@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public void resetPassword(Long userId,String newPassword) {
User user = userDAO.findById(userId);
user.setPassword(newPassword);
System.out.println(user.getTruckOwner().getTruckOwnerId());
userDAO.merge(user);
}
当调用userDAO.merge(user);
时,我遇到以下错误:
非瞬态实体具有空id:com.mymodel.TruckOwner
我在我的项目中的许多地方都遇到了这种问题,请帮助我找到解决此问题的正确方法,以及为什么TruckOwner类由Hibernate设置为所有内容为空?
@Transactional
吗? - EugeneuserDAO.merge
来保存/合并truckOwner
对象。userDAO和truckOwnerDAO是分开的。 user和truck实体彼此完全不同,只是通过映射关联在一起。 - user7041082