एक कस्टम पहचानकर्ता जेनरेटर वर्ग लागू करें; एक ब्लॉग पोस्ट से:
आयात करें .hibernate.engine.spi.SessionImplementor;import org.hibernate.id.IdentifierGenerator;पब्लिक क्लास StringKeyGenerator IdentifierGenerator लागू करता है {@Override public Serializable generate(SessionImplementor session, Object collection) HibernateException {कनेक्शन कनेक्शन =session.connection (); रेडीस्टेडमेंट पीएस =शून्य; स्ट्रिंग परिणाम =""; कोशिश करें {// Oracle-विशिष्ट कोड एक अनुक्रम क्वेरी करने के लिए ps =connection.prepareStatement ("TABLE_SEQ.nextval के रूप में TABLE_PK दोहरे से चुनें"); परिणामसेट आरएस =ps.executeQuery (); अगर (rs.next ()) { int pk =rs.getInt ("TABLE_PK"); // एक स्ट्रिंग परिणाम में कनवर्ट करें =Integer.toString(pk); } } पकड़ें (SQLException e) { नया हाइबरनेट एक्सेप्शन फेंकें ("प्राथमिक कुंजी उत्पन्न करने में असमर्थ"); } अंत में { अगर (पीएस! =शून्य) {कोशिश { ps.close (); } पकड़ें (एसक्यूएलएक्सप्शन ई) {नया हाइबरनेट अपवाद फेंकें ("तैयार कथन को बंद करने में असमर्थ।"); } } } वापसी परिणाम; }}इकाई पीके को इस तरह एनोटेट करें:
@Id@GenericGenerator(name="seq_id", strategy="my.package.StringKeyGenerator")@GeneratedValue(generator="seq_id")@Column(name ="TABLE_PK", unique =true, nullable =झूठा, लंबाई =20) सार्वजनिक स्ट्रिंग getId () {इसे लौटाएं।}
एक्लिप्स में एक बग के कारण, एक त्रुटि उत्पन्न हो सकती है कि जनरेटर (seq_id
) दृढ़ता इकाई में परिभाषित नहीं है। इसे निम्नानुसार चेतावनी पर सेट करें:
- विंडो » प्राथमिकताएं चुनें
- विस्तृत करें जावा दृढ़ता » JPA » त्रुटियां/चेतावनी
- प्रश्न और जेनरेटर क्लिक करें
- सेट जेनरेटर को हठ इकाई में परिभाषित नहीं किया गया है प्रति:
चेतावनी
- ठीकक्लिक करें परिवर्तन लागू करने और संवाद बंद करने के लिए