यह एक भयानक डिज़ाइन है और मैं वास्तव में इसकी अनुशंसा नहीं कर रहा हूं (आपको बस एक और टेबल बनाना चाहिए) लेकिन यह संभव है।
सबसे पहले, आपको byte[]
विशेषता का उपयोग करने वाले व्यक्तियों की सूची का क्रमबद्ध संस्करण रखने की आवश्यकता होगी जो डेटाबेस में बीएलओबी में संग्रहीत किए जाएंगे। तो @Lob
के साथ यह गेटटर एनोटेट करें (मैं गेटटर और सेटर private
उन्हें बेनकाब करने के लिए नहीं बनाऊंगा)। फिर, byte[]
से List<Person>
को वापस करने या सेट करने के लिए "नकली" गेटर और सेटर का पर्दाफाश करें। मैं नीचे दिए गए नमूने में कॉमन्स लैंग से SerializationUtils
का उपयोग कर रहा हूं (byte[]
से/फ्लाई पर क्रमबद्ध/deserialize करने के लिए यदि आप इस पुस्तकालय को आयात नहीं करना चाहते हैं तो आप अपने स्वयं के सहायक वर्ग प्रदान करते हैं)। @Transcient
के साथ "नकली" गेटटर को चिह्नित करना न भूलें या हाइबरनेट एक फ़ील्ड बनाने का प्रयास करेगा (और विफल हो क्योंकि यह List
के प्रकार को निर्धारित करने में सक्षम नहीं होगा)।
@Entity(name = "family")
class Family implements Serializable {
// ...
private byte[] familyMembersAsByteArray;
public Family() {}
@Lob
@Column(name = "members", length = Integer.MAX_VALUE - 1)
private byte[] getFamilyMembersAsByteArray() { // not exposed
return familyMembersAsByteArray;
}
private void setFamilyMembersAsByteArray((byte[] familyMembersAsByteArray() { // not exposed
this.familyMembersAsByteArray = familyMembersAsByteArray;
}
@Transient
public List<Person> getFamilyMembers() {
return (List<Person>) SerializationUtils.deserialize(familyMembersAsByteArray);
}
public void setParticipants(List familyMembers) {
this.familyMembersAsByteArray = SerializationUtils.serialize((Serializable) familyMembers);
}
}
भूल मत Person
वर्ग Serializable
बनाने के लिए और (यहाँ एक डिफ़ॉल्ट मैं सिर्फ दिखा रहा हूँ) एक असली serialVersionUID
जोड़ने के लिए:
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
// ...
private String firstName, lastName;
private int age;
}
लेकिन, मुझे जोर देते हैं, यह एक है भयानक डिजाइन और यह बहुत नाजुक हो जाएगा (Person
बदलना बीएलओबी की सामग्री को विसर्जित करने के मुद्दों से बचने के लिए "माइग्रेट" करने की आवश्यकता हो सकती है और यह दर्दनाक हो जाएगा। आपको वास्तव में इस विचार पर पुनर्विचार करना चाहिए और इसके बजाय Person
के लिए एक और तालिका का उपयोग करना चाहिए (या मैं नहीं करता आप डेटाबेस का उपयोग क्यों नहीं करते हैं)
स्रोत
2010-01-23 10:50:35
यह स्पष्ट नहीं है। यदि आप व्यक्ति के समूह के रूप में familly देख रहे हैं, तो आपको familly के लिए एक नई मेज की जरूरत है, सिवाय इसके कि आप एक साधारण प्रकार के साथ एक पूर्णांक या एक स्ट्रिंग के साथ familly का प्रतिनिधित्व करते हैं। – Kartoch
ओटी: यह एक खराब डिजाइन होगा। –
यदि किसी परिवार के पास 3 सदस्य हैं, तो डेटाबेस कॉलम में आप किस मूल्य को देखने की उम्मीद करेंगे? –