2017-04-04 76 views
1

我可以为了我的生活而没有得到我的头。保存Hibernate JPA子实体的正确方法是什么

我们使用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注释中放置任何级联或提取类型。一个注册人可以有多个角色。

更新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

你居然回答了这个问题:_“我还没有放置在任何级联或OneToMany注释取类型。” _ :) –

回答

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); 
+0

谢谢,我做了完全如上,它的工作100%。我也跟着其中的一些帮助很多: [hibernate一对多映射注释](http://www.journaldev.com/2924/hibernate-one-to-many-mapping-annotation) – Quentinb

相关问题