Note that there are some explanatory texts on larger screens.

plurals
  1. POJPA problem one-to-one association cascade= PERSIST
    primarykey
    data
    text
    <p>I have this ER model</p> <pre><code> Message 0..1 &lt;--&gt; 0..1 MessageDetail PK:ID_MESSAGE PK: ID_DETAIL NAME DETAIL FK: ID_MESSAGE </code></pre> <p>And the relative Object mapping is:</p> <pre><code>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&lt;?&gt; onlineEventMessage; } </code></pre> <p>This test shows how I would like to handle the objects:</p> <pre><code>@Test public void testSaveItem() { EntityManager entityManager = factoryCont0.createEntityManager(); entityManager.getTransaction().begin(); OnlineEventMessage&lt;String&gt; eventMessage = new OnlineEventMessage&lt;String&gt;(EventType.ONLINE_REIMPIANTO_CONTRATTO); EventMessageAnagrafica eventMessageAnagrafica = new EventMessageAnagrafica(multichannelId); eventMessage.setEventMessageAnagrafica(eventMessageAnagrafica); entityManager.persist(eventMessage); entityManager.getTransaction().commit(); entityManager.close(); } </code></pre> <p>When I persist the eventMessage on the eventMessageAnagrafica it does not save the FK. The two ways to save the underlaying association are:</p> <p>1) add this line of code : <code>eventMessageAnagrafica.setOnlineEventMessage(eventMessage);</code> and save the child object: <code>entityManager.persist(eventMessageAnagrafica);</code></p> <p>2) change the parent setter as below:</p> <pre><code>public void setEventMessageAnagrafica(EventMessageAnagrafica eventMessageAnagrafica) { this.eventMessageAnagrafica = eventMessageAnagrafica; if (eventMessageAnagrafica != null) { eventMessageAnagrafica.setOnlineEventMessage(this); } } </code></pre> <p>Is there any other clean way to accomplish this? P.S. Initially the FK was on the parent table Message, but the DBA told me that this wasn't a good ER design.</p> <p>Kind regards Massimo</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload