@ कॉलमनी की संपत्ति पर @ कॉलम () को अनुमति नहीं है


136

मेरे पास संपत्ति सेट के साथ एक जेपीए इकाई है

@ManyToOne
@Column(name="LicenseeFK")
private Licensee licensee;

लेकिन जब मैं JBoss 6 पर तैनात होता हूं, तो एप्लिकेशन यह कहते हुए एक त्रुटि फेंकता है:

org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property

मैं JPA 2.0 कार्यान्वयन के रूप में हाइबरनेट 3.5 का उपयोग करता हूं।

मुझे विदेशी कुंजी कॉलम को संदर्भित करने के लिए क्या उपयोग करना चाहिए?


शायद @ManyToOne एनोटेशन को हटाने से आपकी समस्या हल हो जाती है।
ℛɑƒæĿᴿᴹᴿ

जवाबों:


287

@JoinColumnइसके बजाय का उपयोग करें @Column:

@ManyToOne
@JoinColumn(name="LicenseeFK")
private Licensee licensee;

13
पर क्यों? उस पर कोई स्पष्टीकरण?
ओन्ड्रेज टोकर

4
@OndrejTokar हो सकता है क्योंकि आप @ManyToOneइस पर उपयोग करते हैं, और "mappedBy"दूसरी तरफ (वर्ग), जिसका अर्थ है कि यह कॉलम (नाम "LicenseeFK") एक विदेशी कुंजी है, और इसलिए एक शामिल स्तंभ है। तो, यह नाम के साथ एक JoinColumn है "LicenseeFK"। मुझे उम्मीद है कि अब यह स्पष्ट है।
अलेक्जेंडर

7

उपयोग करने @JoinColumnऔर @Columnएक साथ एक ही त्रुटि के परिणामस्वरूप होगा। इसे केवल उपयोग करने के लिए बदलें: @JoinColumnइसे ठीक करने के लिए।


9
आपका जवाब काफी भ्रामक है। आप \ @ManyToOne बिंदु के साथ \ @ कॉलम का उपयोग नहीं कर सकते।
अबादून

1

@Column

जेपीए @Columnएनोटेशन बुनियादी इकाई विशेषताओं के लिए है, की तरह String, Integer,Date

इसलिए, यदि इकाई विशेषता नाम अंतर्निहित स्तंभ नाम से भिन्न है, तो आपको @Columnस्तंभ नाम को स्पष्ट रूप से निर्दिष्ट करने के लिए एनोटेशन का उपयोग करने की आवश्यकता है , जैसे:

@Column(name="created_on")
private LocalDate createdOn;

@JoinColumn

@JoinColumnएनोटेशन एक अनुकूलित करने के लिए प्रयोग किया जाता है विदेशी कुंजी स्तंभ नाम , और यह केवल एक इकाई संघ के साथ प्रयोग किया जा सकता है।

इसलिए, आपके मामले में, क्योंकि आप एक @ManyToOneएसोसिएशन का उपयोग कर रहे हैं , आपको उपयोग करने की आवश्यकता है @JoinColumn:

@ManyToOne(fetch=FetchTYpe.LAZY)
@JoinColumn(name="LicenseeFK")
private Licensee licensee;

ध्यान दें कि हमने fetchविशेषता को FetchType.LAZYइसलिए सेट किया है , क्योंकि डिफ़ॉल्ट रूप से FetchType.EAGERइसका उपयोग किया जाता है, और यह एक भयानक रणनीति है। अधिक FetchType.LAZYबेहतर डिफ़ॉल्ट के बारे में अधिक जानकारी के लिए , इस लेख को देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.