चूंकि id
फ़ील्ड पहले से ही अद्वितीय है और स्वतः वृद्धि हुई है, इस मामले में आपको एक समग्र आईडी की आवश्यकता नहीं है ताकि आपकी इकाई इस तरह दिख सके:
@Id
@Column(name = "id")
public long getId() {
return id;
}
@Column(name = "subid")
public int getSubid() {
return subid;
}
इकाई प्रबंधक का उपयोग करके आईडी द्वारा इकाई प्राप्त की जा सकती है:
entityManager.find(MyEntity.class, entityId);
या आप एक क्वेरी का उपयोग करके इकाई प्राप्त कर सकते हैं जो id
. दोनों लेती है और subid
:
MyEntity myEntity = entityManager.createTypeQuery("select me from MyEntity where id = :id and subid = :subid", MyEntity.class)
.setParameter("id", entityId)
.setParameter("subid", entitySubId)
.getSingleResult();
हाइबरनेट में एक SelectGenerator भी है। जो डेटाबेस कॉलम से आईडी प्राप्त कर सकता है, जो तब उपयोगी होता है जब डेटाबेस ट्रिगर का उपयोग करके आईडी उत्पन्न करता है।
दुर्भाग्य से, यह समग्र आईडी के साथ काम नहीं करता है, इसलिए आपने अपना खुद का विस्तारित SelectGenerator
लिखा है या एक स्ट्रिंग का उपयोग करें id_sub_id
कॉलम जो आईडी और उप-आईडी को एक एकल VARCHAR कॉलम में जोड़ता है:
'1-0'
'1-1'
'2-0'
'2-1'
आपको डेटाबेस विशिष्ट संग्रहीत कार्यविधि का उपयोग करके दो स्तंभों को अद्यतन करने के लिए एक डेटाबेस ट्रिगर लिखना होगा और दो स्तंभों को VARCHAR एक में एकत्रित करना होगा। फिर आप मानक SelectGenerator
. का उपयोग करके समेकित कॉलम को मैप करते हैं एक स्ट्रिंग फ़ील्ड के लिए:
@Id
@Column(name = "id_sub_id")
@GeneratedValue( strategy = "trigger" )
@GenericGenerator(
name="trigger", strategy="org.hibernate.id.SelectGenerator",
parameters = {
@Parameter( name="keys", value="id_sub_id" )
}
)
public String getId() {
return id;
}