2009-12-03 19 views
15
@Entity 
public class Person { 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Long id; 

    private int salary; 

    @Version 
    private long version; 

    // ...getters and setters 
} 
  1. क्या version के लिए सेटटर/गेटर बनाने की आवश्यकता है?
  2. हाइबरनेट के साथ इस इकाई को बनाए रखने पर, मुझे यह मान मैन्युअल रूप से सेट करने की आवश्यकता नहीं है, है ना?
  3. वसंत के hibernateTemplate.saveOrUpdate के साथ आशावादी समवर्ती जांच का उपयोग करने के लिए मुझे और क्या कॉन्फ़िगर करने की आवश्यकता है? क्या सभी डेटाबेस समर्थित हैं?
  4. इस इकाई का यूनिट-परीक्षण कैसे करें? मेरे डेटाबेस में मेरे सभी रिकॉर्ड संस्करण फ़ील्ड को दिखाते हैं 0
  5. hibernateTemplate.saveOrUpdate कॉलिंग मूल्य हर बार संस्करण मूल्य बढ़ाएगा?

उत्तर

12

मैं कहूंगा:

  1. सेट/संस्करण प्राप्त की आवश्यकता होती है, जैसा कि आप संस्करण अपने आप को निर्धारित करना चाहेंगे कभी कभी (जब पुराने डेटा से एक नया उदाहरण पुनः)
  2. आप अगर जरूरत नहीं है आप डेटाबेस से उदाहरण पढ़ते हैं। (इसे अपने कोड में नए के साथ बनाते समय, यह एक अलग कहानी होगी)।
  3. मुझे और कुछ नहीं दिखाई देता है। मुझे डेटाबेस के साथ कोई समस्या नहीं थी।
  4. यूनिट परीक्षण मेरी राय में डेटाबेस नहीं जाता है, इसलिए डेटाबेस से जुड़े परीक्षणों को एकीकरण परीक्षण कहा जाता है। उनमें से बहुत अधिक नहीं होना चाहिए, क्योंकि वे धीमे होते हैं, और वे वास्तव में आपके कोड का परीक्षण नहीं करते हैं, लेकिन अधिक हाइबरनेट/ड्राइवर/डेटाबेस कोड ... आपको उन पर भरोसा करना चाहिए, या बस उन्हें एक बार परीक्षण करना चाहिए, लेकिन नहीं आपकी सभी संस्थाओं के लिए।
    0 से अधिक संस्करण मान देखने के लिए, लेनदेन में अपनी इकाई को पढ़ें/संशोधित/अपडेट करें, संस्करण एक से बढ़ता है। लेनदेन से बाहर निकलें, फिर से करें, मूल्य बढ़ता है ...
  5. प्रत्येक बार डेटाबेस पंक्ति संशोधित होने पर संस्करण बढ़ेगा।
+0

@KLE बस 2 उपयोगकर्ता कॉल hibernatetemplate.saveorupdate के मामले में, कॉल कॉल hibernatetemplate.saveorupdate कॉल करते समय अतिरिक्त जांच करने की आवश्यकता नहीं है? कोई अपवाद फेंकता है? – cometta

+1

@cometta बिंदु को सहेजना नहीं है या नहीं, लेकिन जहां से डेटा आता है। एक लेनदेन में, ** यदि आप डेटाबेस से एक इकाई पढ़ते हैं **, यह संस्करण जानकारी अद्यतित है। जब आप इसे सहेजते हैं, तो इसे स्वचालित रूप से ख्याल रखा जाता है। यदि आप किसी अन्य स्रोत से डेटा प्राप्त करने के लिए कुछ दिन होते हैं (उदाहरण के लिए किसी फॉर्म का पोस्ट), और इकाई को फिर से बनाएं, तो आपको स्वयं संस्करण का ख्याल रखना होगा। – KLE

+0

एक बहुत अच्छी व्याख्या यहां है: http://en.wikibooks.org/wiki/Java_Persistence/Locking – Zilvinas

संबंधित मुद्दे