JPA问题一对一关联级联=持续

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维护内存中对象之间双向关系的

我有这个ER模型

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