11 java mapping spring hibernate one-to-one
使用Hibernate 5,Spring 4
请考虑以下代码和两个实体之间的映射:
用户类
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user")
private TruckOwner truckOwner;
Run Code Online (Sandbox Code Playgroud)
//下面的getter setters
TruckOwner类
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;
Run Code Online (Sandbox Code Playgroud)
//下面的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);
}
Run Code Online (Sandbox Code Playgroud)
在调用时userDAO.merge(user);我得到以下错误:
非瞬态实体具有空id:com.mymodel.TruckOwner
我在项目的许多地方遇到这种问题,请帮我解决这个问题,为什么TruckOwner类的所有内容都由hibernate设置?
另一个解决方案是将 User 类中的获取类型更改为 EAGER 模式。使用 LAZY 模式,hibernate 不会检索与用户连接的 TruckOwner,因为您的情况没有明确需要它。最终 TruckOwner 对于用户来说为 null,但它设置了 nullable = false 选项,这就是合并失败的原因。
| 归档时间: |
|
| 查看次数: |
1422 次 |
| 最近记录: |