Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
保存Hibernate JPA子实体的正确方法是什么_Hibernate_Jpa_Save_Entity_Parent Child - Fatal编程技术网

保存Hibernate JPA子实体的正确方法是什么

保存Hibernate JPA子实体的正确方法是什么,hibernate,jpa,save,entity,parent-child,Hibernate,Jpa,Save,Entity,Parent Child,我可以一辈子都不去想这个 我们使用Intellij生成标准实体对象。 我现在正试图挽救父子关系 我有两个表,事件\人员\注册表和事件\用户\角色。这就是我尝试过的 eventPersonRegister.setEventUserRolesByPersonRegisterId(new ArrayList<>()); EventUserRole eventUserRole = new EventUserRole(); eventUserRole.setEventPersonRegist

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

我们使用Intellij生成标准实体对象。 我现在正试图挽救父子关系

我有两个表,事件\人员\注册表和事件\用户\角色。这就是我尝试过的

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

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

eventPersonRegisterRepository.save(eventPersonRegister);
但是得到错误:

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

如果我从用户角色端尝试,则不会得到任何错误,但只保存父级,而不保存子级

正如您所说,您可以在OneToMany侧使用cascade

如果不想使用级联,另一个选项是:

//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);
//持久化eventPersonRegister
eventPersonRegister.setEventUserRolesByPersonRegisterId(newArrayList());
entityManager.persist(eventPersonRegister);
//持久化eventUserRole
EventUserRole EventUserRole=新的EventUserRole();
setUserRole(“角色用户”);
entityManager.persist(eventUserRole);
//设置eventUserRole和eventPersonRegister之间的关系
setEventPersonRegisterByUserRoleLinkPersonId(eventPersonRegister);
eventPersonRegister.getEventUserRolesByPersonRegisterId().add(eventUserRole);

您实际上回答了这个问题:“我没有在OneToMany注释上放置任何级联或获取类型。”:)谢谢,我完全按照上面的方法操作,它100%工作。我还遵循了其中一些非常有用的方法:
//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);