我可以为我的生活做好准备,不要理解这一点。
我们使用Intellij生成标准Entity对象。 我现在正试图保存父母的孩子关系。
我有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);
只有父级保存到DB而不是子级记录。 我没有在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方面尝试,那么我不会收到任何错误,但只保存父级而不是子级。
答案 0 :(得分: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);