Hibernate OneToOne映射实体将所有属性设置为null

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设置?

sta*_*032 1

另一个解决方案是将 User 类中的获取类型更改为 EAGER 模式。使用 LAZY 模式,hibernate 不会检索与用户连接的 TruckOwner,因为您的情况没有明确需要它。最终 TruckOwner 对于用户来说为 null,但它设置了 nullable = false 选项,这就是合并失败的原因。