2013-03-26 7 views
5

मुझे दो इकाइयों (ए और बी, एक बी को कई के साथ जोड़ा जा सकता है) के बीच एक से एक मैपिंग मिल गई है जहां मुझे आईडी रखने की क्षमता चाहिए ए (एबी_आईडी) पर बी के लिए जहां उस विशेष बी इकाई डेटाबेस में मौजूद नहीं है। क्या यह संभव है?जेपीए एक से एक रिश्ते जहां इकाई मौजूद नहीं हो सकती है

ए (सरलीकृत) हमारे कोड का उदाहरण:

@Entity 
@Table(name = "A") 
public class A implements java.io.Serializable { 

    // ... 

private B b; 

    // ... 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "B_ID") 
    public B getB() { 
     return this.b; 
    } 

    // ... 
} 


@Entity 
@Table(name = "B") 
public class B implements java.io.Serializable { 

    // ... 

private Set<A> as = new HashSet<A>(0); 

    // ... 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "b") 
    public Set<A> getAs() { 
     return this.as; 
    } 

    // ... 
} 

इस बुनियादी सेटअप हाइबरनेट A.B_ID के लिए एक शून्य मान बचाने की कोशिश के साथ समाप्त होता है और जिसकी अनुमति नहीं है:

Caused by: java.sql.BatchUpdateException: ORA-01400: cannot insert NULL into ("MY_SCHEMA"."A"."B_ID") 

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

उत्तर

3

@ManyToOne पर @NotFound एनोटेशन का उपयोग करने के लिए यह सुनिश्चित करने के लिए कि यह किसी भी त्रुटि का कारण नहीं बनता है। हालांकि मैंने अभी तक एक द्विपक्षीय संबंध के साथ कोशिश नहीं की है।

कृपया यह नहीं कि यह एक हाइबरनेट विशिष्ट एनोटेशन है!

उदाहरण:

@NotFound(action=NotFoundAction.IGNORE) 
संबंधित मुद्दे