JPA problem one-to-one association cascade= PERSIST -


मेरे पास यह ईआर मॉडल है

  संदेश 0..1 & lt; - & gt; 0..1 MessageDetail पी: ID_MESSAGE पी: ID_DETAIL नाम विवरण FK: ID_MESSAGE   

और रिश्तेदार वस्तु मानचित्रण है:

  वर्ग OnlineEventMessage {@Id @ कॉलम (नाम = "ID_EVENT_MESSAGE") @ जनरेटेड वैल्यू (रणनीति = जनरेशन टाइप। अनुक्रम, जनरेटर = "एसईसीई") निजी लांग आईडीईवेंट मेसेज; @OneToOne (मैप किए गए = "ऑनलाइन ईवेंट मेसेज", कैस्केड = कैस्केड टाइप। PERSIST) निजी इवेंट मेसेजअनाग्र्राफिका इवेंट मेसगेअनाग्र्राफा; } सार्वजनिक वर्ग EventMessageAnagrafica {@Id @Column (नाम = "ID_EVENT_MESSAGE_ANAG") @GeneratedValue (रणनीति = GenerationType.SEQUENCE, जनरेटर = "स्व-परीक्षा प्रश्न") निजी लांग idEventMessageAnagrafica; @OneToOne (झरना = CascadeType.PERSIST) @JoinColumn (नाम = "FK_ID_EVENT_MESSAGE") निजी OnlineEventMessage & LT;? & Gt; onlineEventMessage; }   

यह परीक्षण से पता चलता है कि कैसे मैं वस्तुओं को संभालने के लिए करना चाहते हैं:

  @Test सार्वजनिक शून्य testSaveItem () {EntityManager entityManager = factoryCont0.createEntityManager () ; entityManager.getTransaction () शुरू ()।; OnlineEventMessage & LT; स्ट्रिंग & gt; इवेंटमैसेज = नया ऑनलाइनइवेंट मेसेज & lt; स्ट्रिंग & gt; (इवेंट टाईप .ONLINE_REIMPIANTO_CONTRATTO); इवेंट मेसेजअनाग्र्राफिका इवेंट मेसेजअनाग्र्राफिका = नया इवेंट मेसेजअनाग्र्राफिका (मल्टीचैनेलआईडी); eventMessage.setEventMessageAnagrafica (eventMessageAnagrafica); entityManager.persist (eventMessage); entityManager.getTransaction () के लिए प्रतिबद्ध ()।; entityManager.close (); }   

जब मैं इवेंट मैसेज अन्राग्राफिका पर इवेंट मैसेज जारी रखता हूं तो यह एफके को नहीं बचाता है। अंतर्निहित संघ को बचाने के लिए दो तरीके हैं:

1) कोड के इस पंक्ति जोड़ें: eventMessageAnagrafica.setOnlineEventMessage (eventMessage); और बच्चे वस्तु को बचाने: entityManager। जारी रहती है (eventMessageAnagrafica);

2) के रूप में नीचे माता पिता सेटर बदलने के लिए:

  सार्वजनिक शून्य setEventMessageAnagrafica (eventMessageAnagrafica eventMessageAnagrafica) {this.eventMessageAnagrafica = eventMessageAnagrafica; अगर (ईवेंट मैसेजअनाग्र्राफिका! = नल) {ईवेंट मैसेजअनाग्राफिका .सेटऑनलाइनइवेंट मेसेज (यह); }}   

क्या यह पूरा करने के लिए कोई अन्य स्वच्छ तरीका है? अनुलेख शुरूआत में एफके माता-पिता तालिका संदेश पर था, लेकिन डीबीए ने मुझे बताया कि यह एक अच्छा ईआर डिजाइन नहीं था।

तरह का मैसिमो

स्मृति में ऑब्जेक्ट्स के बीच द्विदिश संबंधों के बीच स्थिरता बनाए रखना आपकी ज़िम्मेदारी है रिश्ते को सहेजते समय, जेपीए प्रदाता रिश्ते के स्वामित्व वाले पक्ष को देखता है, जो मैप किए गए बिना पक्ष में है।

मुझे लगता है कि दूसरा दृष्टिकोण सबसे साफ है, क्योंकि यह स्थिरता रखता है स्वचालित रूप से, ताकि आप इसे करने के लिए नहीं भूल सकते। वैकल्पिक रूप से आप सेटर के अलावा इन संस्थाओं को जोड़ने, और सेटर्स तक पहुंच प्रतिबंधित करने के लिए विशेष फ़ंक्शन बना सकते हैं।

Comments