【问题标题】:What is the correct way to save Hibernate JPA child entity保存Hibernate JPA子实体的正确方法是什么
【发布时间】:2017-04-04 13:32:51
【问题描述】:

我可以一辈子不去想这个。

我们使用 Intellij 生成标准实体对象。 我现在正在尝试保存父子关系。

我有 2 个表,event_person_register 和 event_user_role。这是我尝试过的。

eventPersonRegister.setEventUserRolesByPersonRegisterId(new ArrayList<>());

EventUserRole eventUserRole = new EventUserRole();
eventUserRole.setEventPersonRegisterByUserRoleLinkPersonId(eventPersonRegister);
eventUserRole.setUserRole("ROLE_USER");
eventPersonRegister.getEventUserRolesByPersonRegisterId().add(eventUserRole);

eventPersonRegisterRepository.save(eventPersonRegister);

只有父记录保存到数据库中,子记录不保存。 我没有在 OneToMany 注释上放置任何 Cascade 或 fetch 类型。一个注册人可以有多个角色。

更新 1:

我从 eventPersonRegister 实体尝试了以下操作:

@OneToMany(fetch=FetchType.LAZY, mappedBy = "eventPersonRegisterByUserRoleLinkPersonId", cascade=CascadeType.ALL)

但得到错误:

MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails

如果我从 user_role 端尝试,那么我不会收到任何错误,但只有父母被保存,而不是孩子。

【问题讨论】:

  • 您实际上回答了这个问题:“我没有在 OneToMany 注释上放置任何 Cascade 或 fetch 类型。” :)

标签: hibernate jpa save entity parent-child


【解决方案1】:

正如你所说,你可以在 OneToMany 端使用级联。

如果您不想使用级联,另一种选择是:

//persist eventPersonRegister
eventPersonRegister.setEventUserRolesByPersonRegisterId(new ArrayList<>());
entityManager.persist(eventPersonRegister); 

//persist eventUserRole
EventUserRole eventUserRole = new EventUserRole();
eventUserRole.setUserRole("ROLE_USER");
entityManager.persist(eventUserRole);

//set the relation between eventUserRole and eventPersonRegister
eventUserRole.setEventPersonRegisterByUserRoleLinkPersonId(eventPersonRegister);  
eventPersonRegister.getEventUserRolesByPersonRegisterId().add(eventUserRole);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
相关资源
最近更新 更多