У меня есть два объекта: parent:
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 в дочернем объекте имеет значение null. Есть ли решение?
Рассматривая, что вы предоставляете объект UserGroup
вместе со списком User
для сохранения метода: поэтому ваш код должен быть:
em.save(userGroup);
for(User user : UserGroup.getUsers())
{
user.setuser_group_id(userGroup.getUserGroupId());
em.save(user);
}
У вас двунаправленные отношения. Правильный способ ее сохранения заключается в размещении обеих ссылок в объектах.
Ты должен сделать:
userGroup.getUsers().add(user);
user.setUserGroup(userGroup);
entityManager.persist(userGroup);
В своем родительском методе установки ребенка выполните это.
public void setChildren(Collection<Child> children) {
this.children = children;
for(Child child: this.children) {
child.setParent(this)
}
}
Это должно решить.
user_group_id
в дочернем объекте, верно?