मेरे पास एनोटेशन के साथ हाइबरनेट का उपयोग करके एक j2ee एप्लिकेशन है। मैं अपने पूजो क्लास में आईडी फ़ील्ड को ऑटो इंक्रीमेंट या ऑटो जेनरेट करने के लिए कैसे सेट करूं। और बीन जोड़ने में क्या मैं अपने बीन नल में उस क्षेत्र को छोड़ दूं?
जवाबों:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
और आप इसे null
( 0
) जारी रखने पर छोड़ दें । ( null
यदि आप Integer
/ Long
रैपर का उपयोग करते हैं )
कुछ मामलों में AUTO
रणनीति को हल करने के SEQUENCE
लिए IDENTITY
या की तुलना में हल करने के लिए हल किया जाता है TABLE
, इसलिए आप इसे मैन्युअल रूप से IDENTITY
या TABLE
(अंतर्निहित डेटाबेस के आधार पर) सेट करना चाहते हैं ।
ऐसा लगता है SEQUENCE
+ अनुक्रम का नाम निर्दिष्ट करने के लिए काम किया।
इसे निम्नानुसार करें: -
@Id
@GenericGenerator(name="kaugen" , strategy="increment")
@GeneratedValue(generator="kaugen")
@Column(name="proj_id")
public Integer getId() {
return id;
}
आप कजेन के बजाय किसी भी मनमाने नाम का उपयोग कर सकते हैं। यह अच्छी तरह से काम किया, मैं कंसोल पर नीचे दिए गए प्रश्नों को देख सकता था
Hibernate: select max(proj_id) from javaproj
Hibernate: insert into javaproj (AUTH_email, AUTH_firstName, AUTH_lastName, projname, proj_id) values (?, ?, ?, ?, ?)
FYI करें
एक mysql * auto_increment * कॉलम के साथ डेटाबेस से netbeans न्यू एंटिटी क्लासेस का उपयोग करना , आपको निम्नलिखित एनोटेशन के साथ एक विशेषता बनाता है:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
@NotNull
private Integer id;
यह मुझे एक ही त्रुटि कह रहा था कि कॉलम अशक्त नहीं होना चाहिए, इसलिए मैंने विशेषता विशेषता को छोड़कर @NotNull एनोटेशन को हटा दिया, और यह काम करता है!
हाइबरनेट पांच प्रकार की पहचानकर्ता पीढ़ी की रणनीतियों को परिभाषित करता है:
ऑटो - अंतर्निहित डीबी के आधार पर पहचान कॉलम, अनुक्रम या तालिका
टेबल - आईडी पकड़कर
पहचान - पहचान कॉलम
अनुक्रम - अनुक्रम
आइडेंटिटी कॉपी - आइडेंटिटी किसी दूसरी संस्था से कॉपी की जाती है
उदाहरण तालिका का उपयोग करते हुए
@Id
@GeneratedValue(strategy=GenerationType.TABLE , generator="employee_generator")
@TableGenerator(name="employee_generator",
table="pk_table",
pkColumnName="name",
valueColumnName="value",
allocationSize=100)
@Column(name="employee_id")
private Long employeeId;
यदि आपके पास एक संख्यात्मक स्तंभ है जिसे आप ऑटो-इंक्रीमेंट करना चाहते हैं, तो यह columnDefinition
सीधे सेट करने का विकल्प हो सकता है । इसका फायदा यह है, कि स्कीमा ऑटो का उपयोग करता है, भले ही यह हाइबरनेट के बिना इस्तेमाल किया गया हो। हालांकि यह आपके कोड को डीबी-विशिष्ट बना सकता है:
import javax.persistence.Column;
@Column(columnDefinition = "serial") // postgresql
यदि पीके टाइप सीरियल है तो इन्फॉरमिक्स टेबल के लिए रणनीतियों की तलाश में इस एसओ प्रश्न में कोई भी "धक्कों" ।
मैंने पाया है कि यह काम करता है ... एक उदाहरण के रूप में।
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "special_serial_pk")
private Integer special_serial_pk;
जब आप सत्र करते हैं, तो यह सुनिश्चित करने के लिए कि क्या आप काम करते हैं। SaveOrUpdate आप स्तंभ के लिए मान पास करते हैं special_serial_pk NULL ।
मेरे मामले में मैं JSON के साथ एक HTML POST करता हूँ जैसे ...
{
"special_serial_pk": null, //<-- Field to be incremented
"specialcolumn1": 1,
"specialcolumn2": "I love to code",
"specialcolumn3": true
}
एक mysql auto_increment कॉलम के साथ डेटाबेस से netbeans न्यू एंटिटी क्लासेस का उपयोग करना , आपको निम्न हाइबरनेट के साथ एक विशेषता बनाता है ।hm.xml : आईडी ऑटो वेतन वृद्धि है