Hibernate JPA持久保存具有null父ID的子实体

时间:2014-08-01 13:41:00

标签: java hibernate jpa

我有两个实体: 父母:

public class UserGroup{
   @OneToMany(fetch = FetchType.EAGER, mappedBy = "userGroup", cascade = CascadeType.ALL)
    private List<User> users;
}

和孩子:

public class User{
    @ManyToOne(fetch = FetchType.EAGER)
    @Fetch(FetchMode.SELECT)
    @JoinColumn(name = "user_group_id")  
    private UserGroup userGroup;
}

当我尝试使用此方法在用户列表中使用一个用户保存UserGroup时:

  @Transactional
public E save(E e) {
    em.persist(e);
    em.flush();
    em.refresh(e);
    return e;
}

我的父母和孩子正在保存,但子对象中的user_group_id为空。 有没有解决方案?

3 个答案:

答案 0 :(得分:3)

通过考虑您提供UserGroup对象以及User列表来保存方法:所以您的代码应为:

em.save(userGroup);
for(User user : UserGroup.getUsers()) 
{
user.setuser_group_id(userGroup.getUserGroupId());
em.save(user);
}

答案 1 :(得分:2)

你有双向关系。保存它的正确方法是将两个引用放在实体中。

你应该这样做:

userGroup.getUsers().add(user);
user.setUserGroup(userGroup);
entityManager.persist(userGroup);

答案 2 :(得分:2)

在子级的父级setter方法中,执行此操作。

public void setChildren(Collection<Child> children) {
    this.children = children;
    for(Child child: this.children) {
      child.setParent(this)
    }
}

这应该解决。