JPA问题一对一关联级联=持续
我有这个ER模型JPA问题一对一关联级联=持续,jpa,associations,one-to-one,Jpa,Associations,One To One,我有这个ER模型 Message 0..1 <--> 0..1 MessageDetail PK:ID_MESSAGE PK: ID_DETAIL NAME DETAIL FK: ID_MESSAGE 有没有其他干净的方法来实现这一点? 另外,最初FK在父表消息中,但DBA告诉我这不是一个好的ER设计 问候 Massimo维护内存中对象之间双向关系的
Message 0..1 <--> 0..1 MessageDetail
PK:ID_MESSAGE PK: ID_DETAIL
NAME DETAIL
FK: ID_MESSAGE
有没有其他干净的方法来实现这一点?
另外,最初FK在父表消息中,但DBA告诉我这不是一个好的ER设计
问候
Massimo维护内存中对象之间双向关系的两侧之间的一致性是您的责任。保存关系时,JPA提供程序会查看关系的拥有方,即不带
mappedBy的一方
我认为第二种方法是最干净的,因为它自动保持一致性,所以您不会忘记这样做。或者,您可以创建一个特殊函数来关联这些实体(setter除外),并限制对setter的访问 entityManager.getTransaction().begin();
entityManager.getTransaction().begin();
OnlineEventMessage<String> eventMessage = new OnlineEventMessage<String>(EventType.ONLINE_REIMPIANTO_CONTRATTO);
EventMessageAnagrafica eventMessageAnagrafica = new EventMessageAnagrafica(multichannelId);
eventMessage.setEventMessageAnagrafica(eventMessageAnagrafica);
//add this line
eventMessageAnagrafica.setEventMessage(eventMessage);
entityManager.persist(eventMessage);
OnlineEventMessage eventMessage=新的OnlineEventMessage(EventType.ONLINE\u REIMPIANTO\u Contrato);
EventMessageAnagrafica EventMessageAnagrafica=新的EventMessageAnagrafica(多通道ID);
setEventMessageAnagrafica(eventMessageAnagrafica);
//添加这一行
eventMessageAnagrafica.setEventMessage(eventMessage);
entityManager.persist(eventMessage);
@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();
}
public void setEventMessageAnagrafica(EventMessageAnagrafica eventMessageAnagrafica) {
this.eventMessageAnagrafica = eventMessageAnagrafica;
if (eventMessageAnagrafica != null) {
eventMessageAnagrafica.setOnlineEventMessage(this);
}
}
entityManager.getTransaction().begin();
OnlineEventMessage<String> eventMessage = new OnlineEventMessage<String>(EventType.ONLINE_REIMPIANTO_CONTRATTO);
EventMessageAnagrafica eventMessageAnagrafica = new EventMessageAnagrafica(multichannelId);
eventMessage.setEventMessageAnagrafica(eventMessageAnagrafica);
//add this line
eventMessageAnagrafica.setEventMessage(eventMessage);
entityManager.persist(eventMessage);