2012-11-12 11 views
5

में रेल हम serialize विधि है, जो एक विशेषता (या स्तंभ) जब डेटाबेस में बचाया है कि पूर्ण रूप से अपने json में धारावाहिक रूप दिया जाएगा लगता है।वहाँ हाइबरनेट के लिए कुछ भी क्रमानुसार कि/एक json (या xml) स्तंभ यह असली मॉडल विशेषताओं में परिवर्तित करने deserialize है?

उस ऑब्जेक्ट को सहेजा और पूछताछ के बाद, ऑब्जेक्ट धारावाहिक जेसन वास्तविक वर्ग विशेषताओं के रूप में सुलभ हो सकता है।

मेरा प्रश्न है: क्या कोई ऐसा निर्माण या पैकेज है जो इस सुविधा को हाइबरनेट में जोड़ता है? यदि नकारात्मक है, तो क्या प्रतिबिंब जावा एपीआई के साथ गतिशील रूप से गुण बनाना संभव है?

मैं इस पर सवाल कर रहा हूं क्योंकि मैं जावा का एक छोटा सा अध्ययन करने और JVM के साथ क्या कर सकता हूं।

धन्यवाद।

उत्तर

4

मुझे वास्तव में समझ में नहीं आता कि आप क्या चाहते हैं, क्षमा करें।

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

@Entity 
public class Colleague { 
    @Id 
    private int id; 
    private HashMap<Date, String> diary; 
} 

इस तरह एक मेज के लिए नक्शे होगा कि: उदाहरण के लिए अब

create table Colleague (
    id integer primary key, 
    diary blob 
) 

, आप JSON उल्लेख किया है। यह JSON का उपयोग नहीं करेगा; यह मानक जावा क्रमिकरण का उपयोग करेगा। मुझे नहीं लगता कि इसके बजाय JSON का उपयोग करने के लिए कोई खास तरीका है; सबसे आसान संभवतः ऑब्जेक्ट को JSONifying wrapper में क्रमबद्ध करने के लिए लपेटना होगा। बहुत मुश्किल नहीं है, लेकिन थोड़ा अजीब है।

फिर भी, हालांकि यह JSON नहीं है, यह भी उतना ही उपयोगी है: डेटा डेटाबेस में जाता है और फिर वापस आ जाता है।

फिर, पता नहीं करता है, तो यह वास्तव में है कि आप क्या चाहते हैं, खेद है!

+0

धन्यवाद, जो मैं चाहता था वह सुविधा थी :-) आपने इसे खींचा! – thiagofm

+0

दुर्भाग्यवश, 'java.util.Map'' java.io.Serializable' का विस्तार नहीं करता है, लेकिन इसके लोकप्रिय कार्यान्वयन करते हैं! –

3

आप जैक्सन या Gson की तरह इस का उपयोग करते हुए मौजूदा JSON पुस्तकालयों के लिए अपने स्वयं के कस्टम उपयोगकर्ता प्रकार लिख सकते हैं।

  1. jackson-hibernate-module: जैक्सन पर आधारित पूर्व-मौजूदा लाइब्रेरी। आलसी लोड हो रहा है की धारणा
  2. Creating custom JSON user type.
0

मुझे लगता है कि समर्थन करता है, तो आप उस के लिए Gson लाइब्रेरी का उपयोग कर सकते हैं। यह आपको जेसन ऑब्जेक्ट्स या जावा ऑब्जेक्ट्स को क्रमबद्ध और deserialize करने देता है।

एक्सएमएल फाइल के लिए, आप XStream लाइब्रेरी का उपयोग कर सकते हैं।

0

मुझे नहीं लगता कि हाइबरनेट इस तरह के एक उपकरण है है। लेकिन मैं 2 तरीकों को देखने के इस तरह के व्यवहार का अनुकरण करने

  1. अपने इकाई में एक जेपीए @PrePersit विधि का उपयोग करें और एक JSON पुस्तकालय का उपयोग अपने इकाई तरीकों पर एक मूल्य
  2. उपयोग कुछ AOP फिर से प्रस्तुत करना और करने के बारे में फिर से प्रस्तुत करना वैसे ही