2.1 एनोटेशन @Entity, @Table

यदि आप डेटाबेस में अपनी कक्षा को किसी तालिका में मैप करना चाहते हैं, तो इसके लिए आपको इसमें 3 एनोटेशन जोड़ने की आवश्यकता है।

सबसे पहले, आपको कक्षा में एक एनोटेशन जोड़ने की आवश्यकता है @Entity। कक्षा के सामने यह एनोटेशन हाइबरनेट को बताएगा कि यह सिर्फ एक वर्ग नहीं है, बल्कि एक विशेष वर्ग है जिसकी वस्तुओं को डेटाबेस में संग्रहित करने की आवश्यकता है।

उदाहरण:

@Entity
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

यह हाइबरनेट के लिए इस वर्ग की वस्तुओं को एक विशेष तरीके से व्यवहार करने के लिए पर्याप्त है।

दूसरा एनोटेशन है @Table। इसकी मदद से आप डेटाबेस में टेबल का नाम सेट कर सकते हैं जिससे यह क्लास जुड़ी होगी। उदाहरण:

@Entity
@Table(name="user")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

यदि वर्ग का नाम और तालिका का नाम समान है, तो एनोटेशन @Tableछोड़ा जा सकता है।

साथ ही, यदि आपका एप्लिकेशन एक ही समय में कई स्कीमा से तालिकाओं के साथ काम करता है, तो आपको यह निर्दिष्ट करने की आवश्यकता है कि तालिका किस विशेष स्कीमा में स्थित है:

@Entity
@Table(name="user", schema="test")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

हाँ, सब कुछ उतना ही सरल है जितना लगता है।

2.2 @ कॉलम एनोटेशन

जानने के लिए दूसरी महत्वपूर्ण बात यह है कि टेबल कॉलम को क्लास फील्ड में मैप किया जाता है। सरलतम संस्करण में, हाइबरनेट बस आपकी इकाई वर्ग के फ़ील्ड को वांछित तालिका के कॉलम में मैप करेगा।

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

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

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

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

एनोटेशन @Columnके विभिन्न पैरामीटर हैं, नीचे हम उनमें से सबसे लोकप्रिय पर विचार करेंगे:

# उत्तरदायी ठहराने के लिए नाम विशेषता प्रकार विवरण
1 नाम डोरी वर्ग क्षेत्र के लिए तालिका स्तंभ नाम सेट करता है
2 अद्वितीय बूलियन सभी फ़ील्ड मान अद्वितीय होने चाहिए
3 नल बूलियन क्षेत्र शून्य हो सकता है
4 लंबाई int यहाँ अधिकतम लंबाई (तारों के लिए)

आइए हमारे उपयोगकर्ता इकाई वर्ग के क्षेत्रों में कुछ बाधाएँ जोड़ें:

  • उपयोगकर्ता नाम अद्वितीय होना चाहिए और 100 वर्णों से अधिक नहीं होना चाहिए
  • स्तर शून्य हो सकता है
  • createDate शून्य नहीं हो सकता

तब हमारे एनोटेशन बन जाते हैं:

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

   @Column(name="name", unique=true, length=100)
   public String name;

   @Column(name="level", nullable=true)
   public Integer level;

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

आप उपयोगकर्ता प्रकार का ऑब्जेक्ट बना सकते हैं और यहां तक ​​​​कि सभी शून्य फ़ील्ड भी असाइन कर सकते हैं, हालांकि, जब आप इसे डेटाबेस में सहेजने का प्रयास करते हैं, तो हाइबरनेट चेक करेगा, और यदि किसी प्रतिबंध का उल्लंघन किया जाता है, तो अपवाद फेंक दिया जाएगा।

2.3 @Id एनोटेशन

और एक और महत्वपूर्ण एनोटेशन है @Id। इसका उपयोग तालिका के लिए प्राथमिक कुंजी सेट करने के लिए किया जा सकता है।

वांछित क्षेत्र के लिए आपको केवल इस एनोटेशन को निर्दिष्ट करने की आवश्यकता है - और हाइबरनेट स्वयं सब कुछ करेगा:

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

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

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

यदि आप चाहते हैं कि हाइबरनेट स्वतंत्र रूप से डेटाबेस में जोड़ते समय आपकी वस्तुओं की आईडी उत्पन्न करे , तो आपको एक और एनोटेशन - जोड़ने की आवश्यकता है @GeneratedValue। तो हमारा उदाहरण इस तरह दिखेगा:

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

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

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

हमने यहां आईडी फ़ील्ड के लिए एनोटेशन को छोड़ दिया, क्योंकि इसमें बहुमूल्य जानकारी नहीं है - तालिका में फ़ील्ड का नाम और कॉलम का नाम समान है, और बाकी एनोटेशन के लिए धन्यवाद, हाइबरनेट पहले से ही समझता है कि हम एक टेबल के बारे में बात कर@Column रहे हैं कॉलम।