CodeGym/Java Course/All lectures for HI purposes/प्राथमिक कुंजी

प्राथमिक कुंजी

उपलब्ध

@Id एनोटेशन

हाइबरनेट में प्रत्येक इकाई इकाई में एक फ़ील्ड होना चाहिए जो प्राथमिक कुंजी होगी: इसमें इस वर्ग की सभी वस्तुओं के लिए एक अद्वितीय मान होता है। आमतौर पर, इस क्षेत्र को @Id एनोटेशन के साथ एनोटेट किया जाता है ।

सामान्य फ़ॉर्म:

@Id
Class Name;

उदाहरण:

@Entity
@Table(name="user")
class User
{
   @Id
   @Column(name="id")
   public Integer id;

   @Embedded
   public UserAddress address;

   @Column(name="created_date")
   public Date createdDate;
}

एनोटेशन प्लेसमेंट

वैसे, आप न केवल खेतों के लिए, बल्कि तरीकों के लिए भी @ कॉलम एनोटेशन लिख सकते हैं: गेटर्स या सेटर्स के लिए। उदाहरण:

@Entity
@Table(name="user")
class User
{
    public Integer id;
    public Date createdDate;

   @Id
   @Column(name="id")
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   @Column(name="created_date")
   public Date getDate() {
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
      this. createdDate = date;
   }
}

यह दृष्टिकोण तब प्रकट हुआ जब एनोटेशन को न केवल कक्षाओं में, बल्कि इंटरफेस में भी जोड़ा जाने लगा। इंटरफ़ेस में क्लास फ़ील्ड नहीं हैं, लेकिन विधियाँ हैं: गेटर्स और सेटर्स। हाइबरनेट इन दोनों मानकों का समर्थन करता है।

महत्वपूर्ण! यदि किसी वर्ग में @Entity एनोटेशन है , तो उसके सभी क्षेत्रों को हाइबरनेट द्वारा लगातार फ़ील्ड के रूप में माना जाता है (जब तक कि उनके पास @Transient एनोटेशन निर्दिष्ट न हो )। भले ही फ़ील्ड में कोई एनोटेशन न हो: इस मामले में, कॉलम नाम को क्लास फ़ील्ड नाम के बराबर माना जाता है।

यहीं पर @Id एनोटेशन एक महत्वपूर्ण भूमिका निभाता है। यदि एनोटेशन को क्लास फ़ील्ड पर रखा गया है, तो हाइबरनेट फ़ील्ड के नाम और प्रकार को देखेगा। यदि किसी विधि पर @Id एनोटेशन रखा गया है, तो हाइबरनेट विधियों के नामों और प्रकारों को देखेगा।

उदाहरण 1:

@Entity
@Table(name="user")
class User
{
   @Id
    public Integer id;
    public Date createdDate;  //this field will be treated as if it had @Column(name=" createdDate ")

}

उदाहरण 2:

@Entity
@Table(name="user")
class User
{
    public Integer id;
    public Date createdDate;

   @Id
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   public Date getDate() { //this field will be treated as if it had @Column(name=”date ”)
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
  	this. createdDate = date;
   }

}

@GeneratedValue एनोटेशन

आप अपनी नई वस्तुओं को स्वयं आईडी असाइन कर सकते हैं, या इसे हाइबरनेट की दया पर छोड़ सकते हैं। हाइबरनेट को यह समझने के लिए कि आपकी वस्तुओं को आईडी कैसे सौंपी जाए, इसके लिए एक विशेष एनोटेशन है:

@GeneratedValue

यह एनोटेशन आमतौर पर उसी फ़ील्ड को @Id एनोटेशन के रूप में चिह्नित करता है । उसके पास 4 संभावित आईडी असाइनमेंट रणनीतियाँ हैं:

  • ऑटो
  • पहचान
  • अनुक्रम
  • मेज

निर्दिष्ट रणनीति के साथ एनोटेशन का एक उदाहरण:

@Entity
@Table(name="user")
class User
{
    @Id
	@GeneratedValue(strategy = GenerationType.AUTO)
    public Integer id;

    public Date createdDate;
}

यदि कोई नीति मान निर्दिष्ट नहीं किया गया है, तो ऑटो रणनीति का चयन किया जाएगा। ऑटो रणनीति का अर्थ है कि हाइबरनेट मुख्य रूप से आईडी फ़ील्ड के डेटा प्रकार के आधार पर आईडी को ही असाइन करेगा।

टाइप पर क्यों? हां, क्योंकि आईडी प्रकार बहुत भिन्न हो सकते हैं, उदाहरण के लिए, स्ट्रिंग या GUID। उदाहरण:

@Entity
@Table(name="user")
class User
{
    @Id
	@GeneratedValue
    public UUID id;

    public Date createdDate;
}

नोट: जावा में एक GUID को ऐतिहासिक रूप से बोलते हुए UUID कहा जाता है। और यदि आप इसे पूछते हैं तो हाइबरनेट आपकी वस्तुओं के लिए अद्वितीय यूयूआईडी उत्पन्न कर सकता है।

विभिन्न @GeneratedValue रणनीतियाँ

यदि आप GeneratedValue(strategy = GenerationType.IDENTITY) प्रकार निर्दिष्ट करते हैं , तो हाइबरनेट आईडी सेटिंग को डेटाबेस परत पर प्रतिनिधि करता है। विशिष्ट रूप से, यह प्राथमिक कुंजी, AUTOINCREMENT लेबल वाले कॉलम का उपयोग करता है।

लेकिन अगर आप चाहते हैं कि आपकी आईडी अद्वितीय हों और विशेष रूप से निर्दिष्ट एल्गोरिथम के अनुसार उत्पन्न हों, तो आप उदाहरण के लिए GeneratedValue(strategy = GenerationType.SEQUENCE) एनोटेशन का उपयोग कर सकते हैं:

@Entity
@Table(name="user")
public class User {
	@Id
	@GeneratedValue(generator = "sequence-generator")
	@GenericGenerator(
  	name = "sequence-generator",
  	strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
  	parameters = {
    	@Parameter(name = "sequence_name", value = "user_sequence"),
    	@Parameter(name = "initial_value", value = "4"),
    	@Parameter(name = "increment_size", value = "1")
    	}
	)
	private long userId;

	// ...
}

आईडी बनाने के और भी कई तरीके हैं। उदाहरण के लिए, आपके पास कई स्तंभों वाली एक समग्र अद्वितीय कुंजी हो सकती है। और डेटाबेस में ऑब्जेक्ट लिखते समय, आपको इन सभी कॉलमों को भरना होगा।

मैं उन्हें विस्तार से नहीं दूंगा। फिर भी, हमारे व्याख्यान का उद्देश्य हाइबरनेट से परिचित होना है, न कि आधिकारिक दस्तावेज को फिर से बताना।

टिप्पणियां
  • लोकप्रिय
  • नया
  • पुराना
टिप्पणी लिखने के लिए आपको साइन इन करना होगा
इस पेज पर अभी तक कोई टिप्पणियां नहीं हैं