Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

हाइबरनेट में एक स्ट्रिंग को डीबी अनुक्रम में कैसे मैप करें?

एक कस्टम पहचानकर्ता जेनरेटर वर्ग लागू करें; एक ब्लॉग पोस्ट से:

आयात करें .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 ) दृढ़ता इकाई में परिभाषित नहीं है। इसे निम्नानुसार चेतावनी पर सेट करें:

  1. विंडो » प्राथमिकताएं चुनें
  2. विस्तृत करें जावा दृढ़ता » JPA » त्रुटियां/चेतावनी
  3. प्रश्न और जेनरेटर क्लिक करें
  4. सेट जेनरेटर को हठ इकाई में परिभाषित नहीं किया गया है प्रति:चेतावनी
  5. ठीकक्लिक करें परिवर्तन लागू करने और संवाद बंद करने के लिए


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle LISTAGG फ़ंक्शन का उपयोग कैसे करें

  2. Oracle डाटाबेस परिवर्तन अधिसूचना

  3. एक ट्रिगर का उपयोग किए बिना Oracle में ऑटो-इन्क्रीमेंट

  4. Oracle में टाइमस्टैम्प कैसे डालें?

  5. Oracle (11.2.0.1):उस पंक्ति की पहचान कैसे करें जो वर्तमान में अद्यतन विवरण द्वारा अद्यतन की गई है