आपकी सबसे बड़ी समस्या <key>
. में गलत कॉलम है मैपिंग - यह "user_id" होना चाहिए, न कि "id"। उस ने कहा, आपकी पूरी मैपिंग मुझे थोड़ी अजीब लगती है।
सबसे पहले, यदि आप चाहते हैं कि आईडी स्वतः उत्पन्न हों, तो आपको उचित जनरेटर निर्दिष्ट करके हाइबरनेट को वास्तव में इसका ध्यान रखना चाहिए:
<id column="id" name="id"> <generator class="native"/> </id>
पढ़ें हाइबरनेट दस्तावेज़ीकरण ए> विभिन्न उपलब्ध विकल्पों के लिए जनरेटर पर।
दूसरे, यदि आपको केवल स्ट्रिंग प्रकारों का एक सेट चाहिए, तो उन्हें एक-से-अनेक संबंध के बजाय तत्वों के संग्रह में फिर से मैप करने पर विचार करें:
<set name="types" table="types"> <key column="user_id"/> <element column="type" type="string"/> </set>
इस तरह आपको इसके लिए स्पष्ट "प्रकार" वर्ग या मैपिंग की आवश्यकता नहीं होगी। यहां तक कि अगर आप "प्रकार" पर अतिरिक्त विशेषताएं रखना चाहते हैं, तब भी आप इसे इकाई के बजाय घटक के रूप में मैप कर सकते हैं।
अंत में, यदि किसी आवश्यकता के कारण "प्रकार" एक इकाई होना चाहिए जिसका आपने वर्णन नहीं किया है, तो "उपयोगकर्ता" और "प्रकार" के बीच संबंध द्वि-दिशात्मक है और इसे इस प्रकार मैप करने की आवश्यकता है:
<set name="types" table="types" inverse="true"> <key column="user_id"/> <one-to-many class="Types"/> </set> ... in Types mapping: <many-to-one name="user" column="user_id" not-null="true"/>
बाद के मामले में "प्रकार" के पास "उपयोगकर्ता" प्रकार की "उपयोगकर्ता" संपत्ति होनी चाहिए।यहां एक विस्तृत उदाहरण है।