कस्टम हाइबरनेट संग्रह के लिए डालें, @WhereJoinTable के समकक्ष

वोट
4

मैं एक मेज में शामिल होने पर एक अतिरिक्त विशेषता (ध्वज) के साथ रिश्ता मैप करने के लिए कोशिश कर रहा हूँ, लेकिन स्पष्ट रूप से यह एक इकाई में तालिका में शामिल होने को परिभाषित करने के बिना।

मुसीबत:

बिजनेस 0 या 1 मुख्य देश को सौंपा गया है, व्यापार भी 0 या अधिक माध्यमिक देशों से जुड़ा हुआ है।

मैं तीन टेबल है: Business, Country,Business_Country

मेरे में Business, मैं एक है @WhereJoinTableजो पुन: प्राप्त करने के लिए काफी अच्छा काम करता है:

@OneToOne
@JoinTable(
        name=business_country,
        joinColumns = @JoinColumn( name=business_id),
        inverseJoinColumns = @JoinColumn( name=country_id)
)
@WhereJoinTable(clause=is_main = 1)
private Country mainCountry;

@OneToMany
@JoinTable(
        name=business_country,
        joinColumns = @JoinColumn( name=business_id),
        inverseJoinColumns = @JoinColumn( name=country_id)
)
@WhereJoinTable(clause=is_main = 0)
private Set<Country> secondaryCountries = new HashSet<>();

मुझे आश्चर्य है कि क्या समकक्ष इस बात का होगा @WhereJoinTableबचाता प्रदर्शन करने के लिए।

बस इकाई बनाने Businessऔर इसे करने के लिए देश जोड़ना एक बाधा उल्लंघन देता है:

cannot insert NULL into (TESTSCHEMA.BUSINESS_COUNTRY.IS_MAIN)

मुझे क्या करना चाहते हैं कि is_main पर सेट किया जाता है 1के लिए mainCountryऔर करने के लिए 0में सभी प्रविष्टियों के लिए secondaryCountries

अगर वहाँ एक कस्टम के साथ कुछ संभव हो गया था मैं सोच रहा था @SQLInsert?

25/04/2014 को 21:07
उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
1

आप उपयोग कर सकते हैं @SQLInsertसंघ तालिका के लिए एक कस्टम एसक्यूएल डालने बयान निर्दिष्ट करने के लिए:

@OneToOne
@JoinTable(
        name="business_country",
        joinColumns = @JoinColumn( name="business_id"),
        inverseJoinColumns = @JoinColumn( name="country_id")
)
@WhereJoinTable(clause="is_main = 1")
@SQLInsert(sql = "insert into business_country (business_id, country_id, is_main) values (?, ?, 1)")
private Country mainCountry;

@OneToMany
@JoinTable(
        name="business_country",
        joinColumns = @JoinColumn( name="business_id"),
        inverseJoinColumns = @JoinColumn( name="country_id")
)
@WhereJoinTable(clause="is_main = 0")
@SQLInsert(sql = "insert into business_country (business_id, country_id, is_main) values (?, ?, 0)")
private Set<Country> secondaryCountries = new HashSet<>();

यह और इस लेख भी सहायक हो सकता है (डालने बयान में स्तंभों के आदेश पर ध्यान देना)।

22/08/2016 को 16:24
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more