JPA 문제 one-to-one 연관 cascade = PERSIST
이 ER 모델이 Message 0..1 <--> 0..1 MessageDetail
PK:ID_MESSAGE PK: ID_DETAIL
NAME DETAIL
FK: ID_MESSAGE
그리고 상대 개체 매핑은 다음과 같습니다.
class OnlineEventMessage {
@Id
@Column(name = "ID_EVENT_MESSAGE")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ")
private Long idEventMessage;
@OneToOne(mappedBy="onlineEventMessage", cascade=CascadeType.PERSIST)
private EventMessageAnagrafica eventMessageAnagrafica;
}
public class EventMessageAnagrafica {
@Id
@Column(name = "ID_EVENT_MESSAGE_ANAG")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ")
private Long idEventMessageAnagrafica;
@OneToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name = "FK_ID_EVENT_MESSAGE")
private OnlineEventMessage<?> onlineEventMessage;
}
이 테스트에서는 개체를 처리하는 방법을 보여줍니다.
@Test
public void testSaveItem() {
EntityManager entityManager = factoryCont0.createEntityManager();
entityManager.getTransaction().begin();
OnlineEventMessage<String> eventMessage = new OnlineEventMessage<String>(EventType.ONLINE_REIMPIANTO_CONTRATTO);
EventMessageAnagrafica eventMessageAnagrafica = new EventMessageAnagrafica(multichannelId);
eventMessage.setEventMessageAnagrafica(eventMessageAnagrafica);
entityManager.persist(eventMessage);
entityManager.getTransaction().commit();
entityManager.close();
}
eventMessageAnagrafica의 eventMessage는 FK를 저장하지 않습니다.
1)이 코드 줄을 추가하십시오 : eventMessageAnagrafica.setOnlineEventMessage(eventMessage);
그리고 자식 개체를 저장하십시오 : entityManager.persist(eventMessageAnagrafica);
entityManager.persist(eventMessageAnagrafica);
2) 부모 설정자를 아래와 같이 변경하십시오 :
public void setEventMessageAnagrafica(EventMessageAnagrafica eventMessageAnagrafica) {
this.eventMessageAnagrafica = eventMessageAnagrafica;
if (eventMessageAnagrafica != null) {
eventMessageAnagrafica.setOnlineEventMessage(this);
}
}
이것을 수행하는 다른 방법이 있습니까? 추신 처음에는 FK가 부모 테이블 Message에 있었지만 DBA는 이것이 좋은 응급실 디자인이 아니라고 말했습니다.
종류 관련 안부 Massimo