2017-04-04 5 views
1

나는이 일로 인해 내 머리를 쓰지 않아도된다.Hibernate JPA 자식 엔티티를 저장하는 올바른 방법은 무엇입니까

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 주석에 캐스 캐 이드 또는 페치 유형을 배치하지 않았습니다. 하나의 등록 된 사용자는 여러 역할을 가질 수 있습니다.

업데이트 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 쪽에서 캐스케이드를 사용할 수 있습니다. _ "내가 어떤 캐스케이드 배치 또는 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 % 작동합니다. 나는 또한 많은 도움을 준이 중 일부를 따랐다. [1 대 많은 매핑 어노테이션을 최대 절전] (http://www.journaldev.com/2924/hibernate-one-to-many-mapping-annotation) – Quentinb