Hibernate JPA сохраняется сохраненная дочерняя сущность с нулевым родительским идентификатором

1

У меня есть два объекта: 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. Есть ли решение?

  • 0
    user_group_id в дочернем объекте, верно?
  • 0
    user_group_id у ребенка в БД, да, моя ошибка
Показать ещё 1 комментарий
Теги:
hibernate
jpa

3 ответа

3
Лучший ответ

Рассматривая, что вы предоставляете объект UserGroup вместе со списком User для сохранения метода: поэтому ваш код должен быть:

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

У вас двунаправленные отношения. Правильный способ ее сохранения заключается в размещении обеих ссылок в объектах.

Ты должен сделать:

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

В своем родительском методе установки ребенка выполните это.

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

Это должно решить.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню