2009-05-08 15 views
10

मैं हाइबरनेट में "शून्य या एक" रिश्ते को मैप करने का प्रयास कर रहा हूं। मुझे लगता है कि मुझे कई से एक का उपयोग करने का तरीका मिल सकता है।हाइबरनेट एक से शून्य या एक मैपिंग

class A { 
    private B b; 
    // ... getters and setters 
} 

class B { 
    private A a; 
} 

क्लास ए की मैपिंग निर्दिष्ट करता है:

<many-to-one name="b" class="B" 
insert="false" update="false" 
column="id" unique="true"/> 

और कक्षा बी की मैपिंग निर्दिष्ट करता है:

<one-to-one name="a" class="A" constrained="true"/> 

मैं क्या चाहते हैं जब कोई मिलता-जुलता पंक्ति बी के लिए मिला था अशक्त होने के लिए ख के लिए है डेटाबेस में तो मैं यह कर सकता हूं (कक्षा ए में):

if (b == null) 

हालांकि, ऐसा लगता है कि बी कभी शून्य नहीं है।

मैं इसके बारे में क्या कर सकता हूं?

+0

मैं उत्तर के लिए तत्पर हूं – Schildmeijer

+0

"उत्तर में" उत्तर – Schildmeijer

उत्तर

6

जवाब = एक में कई-से-एक बयान के "अनदेखा" नहीं पाया जोड़ने के लिए किया गया था:

<many-to-one name="b" class="B" not-found="ignore" insert="false" update="false" column="id" unique="true"/> 

मैं बस आलसी जोड़ने की कोशिश की = "false" बी को रूप में रोब एच सिफारिश की, लेकिन यह एक HibernateObjectRetrievalFailureException हर परिणामस्वरूप मैं एक एक है कि कोई बी

अधिक जानकारी के लिए इस सूत्र देखें था भरी हुई:

https://forum.hibernate.org/viewtopic.php?p=2269784&sid=5e1cba6e2698ba4a548288bd2fd3ca4e

+2

एनोटेशन का उपयोग करके इसका उपयोग कैसे करें? – Nik

0

कई से एक तत्व पर आलसी = "झूठी" सेटिंग करने का प्रयास करें। इससे पहले ऑब्जेक्ट ("ए") लोड होने पर हाइबरनेट को एसोसिएशन ("बी") लाने की कोशिश करनी चाहिए। "ए" में संपत्ति या तो "बी" या शून्य के वास्तविक उदाहरण के साथ शुरू की जाएगी।

16

एल आइक Boden ने कहा, इस सवाल का जवाब टिप्पणी के साथ ऐसा करने से ए में कई-से-एक बयान के not-found="ignore" जोड़ने के लिए है:

क्लास ए में:

@ManyToOne 
@Cascade({ CascadeType.ALL }) 
@JoinColumn(name = "Id") 
@NotFound(action=NotFoundAction.IGNORE) 
private B b 

कक्षा बी में:

@Id 
@GeneratedValue(generator = "myForeignGenerator") 
@org.hibernate.annotations.GenericGenerator(
    name = "myForeignGenerator", 
    strategy = "foreign", 
    parameters = @Parameter(name = "property", value = "a") 
) 
private Long subscriberId; 

@OneToOne(mappedBy="b") 
@PrimaryKeyJoinColumn 
@NotFound(action=NotFoundAction.IGNORE) 
private A a; 
संबंधित मुद्दे