4.1 व्यवहार आणि डेटाबेस अखंडता

डेटाबेसच्या ऑपरेशनचा सामान्य मोड म्हणजे जेव्हा प्रत्येक मिनिटाला शेकडो वेगवेगळ्या क्लायंटकडून हजारो विनंत्या प्राप्त होतात. या प्रकरणात, जेव्हा वेगवेगळ्या क्वेरींमधून समान डेटा ऍक्सेस केला जातो तेव्हा परिस्थिती अनेकदा उद्भवते.

कमी वेळा, परंतु, पुन्हा, वेळोवेळी अशी परिस्थिती असते जेव्हा एखादी विनंती विशिष्ट ओळ वाचते आणि दुसरी विनंती त्याच वेळी ती बदलते. कल्पना करा की जर एखादी ओळ अर्धीच बदललेली असेल तर काय होईल? काहीही चांगले नाही.

ही समस्या अनेक प्रकारे सोडवली जाते. प्रथम, आपण बदलणारी ओळ लॉक करू शकता. वाचनासाठी आणि लेखनासाठीही. ही पद्धत कार्य करते, परंतु बेसची गती मोठ्या प्रमाणात ग्रस्त आहे.

दुसरा मार्ग म्हणजे फक्त लेखनासाठी स्ट्रिंग लॉक करणे. तथापि, जेव्हा कोणीतरी अर्धवट सुधारित ओळ वाचण्याचा प्रयत्न करेल तेव्हा तरीही समस्या असेल. निष्कर्ष - जेव्हा ओळ अंशतः बदलली जाते तेव्हा अशी परिस्थिती नसावी.

म्हणून, त्यांनी तिसरी पद्धत आणली - व्यवहार. व्यवहार हा क्रियांचा एक समूह आहे जो एकतर सर्व एकत्रितपणे केला जातो किंवा काहीही नाही. अशी परिस्थिती असू शकत नाही जिथे क्रियांचा काही भाग केला गेला आणि दुसरा भाग केला गेला नाही. सर्व बदल करणे शक्य नसल्यास, आधीच केलेले सर्व बदल परत आणले जातात.

कोणताही आधुनिक SQL सर्व्हर तुम्हाला केवळ व्यवहारांमध्ये डेटा बदलण्याची परवानगी देतो. तुम्ही व्यवहार उघडता, कितीही तक्त्यांमध्ये कोणतेही बदल करा आणि व्यवहार करा. SQL सर्व्हर नंतर बदल करण्याचा प्रयत्न करतो. जर सर्व काही ठीक असेल तर ते सामान्य डेटाबेसमध्ये जोडले जातील. समस्या असल्यास, सर्व बदल रद्द केले जातील.

हायबरनेट हा नमुना देखील वापरतो. म्हणूनच मागील लेक्चरमध्ये आपण पाहिले की कर्मचारी ऑब्जेक्ट डेटाबेसमध्ये सेव्ह करण्याचा प्रयत्न करताना, प्रथम एक व्यवहार उघडला गेला आणि सेव्ह केल्यानंतर तो कमिट झाला.

आम्ही या विषयावर अधिक तपशीलवार जाऊ, परंतु आत्तासाठी, व्यवहार का आवश्यक आहेत आणि ते सहसा कुठे वापरले जातात हे जाणून घ्या.

4.2 वस्तू मिळवणे

जर हायबरनेटने डेटा मिळविण्याची विनंती अंमलात आणली, तर स्पष्टपणे व्यवहार उघडण्याची गरज नाही. हायबरनेट हे योग्य दिसल्यास ते स्वतःच हे करेल: त्याच्या सेटिंग्ज तसेच SQL सर्व्हरच्या सेटिंग्ज आहेत.

आम्ही डेटाबेससह कसे कार्य करावे याचे विश्लेषण करू. आणि त्यापैकी सर्वात सोपी गोष्ट म्हणजे त्याच्या आयडीद्वारे ऑब्जेक्ट मिळवणे . हे करण्यासाठी, सत्रget() ऑब्जेक्टवर पद्धत वापरा . अशा विनंतीचे सामान्य स्वरूपः

Class Name = session.get(Class.class, ID);

उदाहरण:

public User getUserById(Integer id) {
    try (Session session = sessionFactory.openSession()) {
        User user = session.get(User.class, id);
        return user;
    }
}

4.3 वस्तू जतन करणे (जोडणे).

जर तुम्हाला तुमचा ऑब्जेक्ट डेटाबेसमध्ये सेव्ह करायचा असेल, तर SQL स्तरावर क्वेरी कार्यान्वित केली जाईल.घाला. म्हणून, तुमच्या कृती स्वतंत्र व्यवहार म्हणून केल्या पाहिजेत. तसेच, सक्तीसाठी सत्रpersist() ऑब्जेक्टची पद्धत वापरणे चांगले आहे .

अशा विनंतीचे सामान्य स्वरूपः

session.persist(An object);

पद्धत persist()केवळ बेसच नाही तर ऑब्जेक्ट देखील बदलते. गोष्ट अशी आहे की जेव्हा आपण डेटाबेसमध्ये एखादी वस्तू जोडतो तेव्हा ती जोडण्यापूर्वी या ऑब्जेक्टचा स्वतःचा ID नसतो . बरं, सहसा तसे, जरी बारकावे आहेत. आणि ऑब्जेक्ट जोडल्यानंतर आधीच एक ID आहे .

public boolean saveUser(User user) {
    try (Session session = sessionFactory.openSession()) {
            Transaction transaction = session.beginTransaction();
            session.persist(user);
            transaction.commit();
            return true;
    }
    catch() {
    return false;
   	}
}

सत्र ऑब्जेक्टमध्ये एक पद्धत आहे save()जी समान कार्य करते. फक्त ती पद्धत save()जुनी हायबरनेट मानक आहे आणि पद्धत persist()JPA मानक आहे.

4.4 वस्तू हटवणे

जर तुम्हाला अस्तित्वात असलेली एखादी वस्तू हटवायची असेल तर ते करणे खूप सोपे आहे. हे करण्यासाठी, सत्र ऑब्जेक्टची एक विशेष पद्धत आहे - remove().

अशा विनंतीचे सामान्य स्वरूपः

session.remove(An object);

आणि, अर्थातच, उदाहरणासह कोड लिहू:

public boolean removeUser(User user) {
    try (Session session = sessionFactory.openSession()) {
            Transaction transaction = session.beginTransaction();
            session.remove(user);
            transaction.commit();
            return true;
    }
    catch() {
    return false;
   	}
}

हे इतके अवघड का आहे, तुम्ही विचारता?

बरं, सर्व प्रथम, डेटाबेसमधील कोणत्याही बदलांचे नेहमीच वेगळे आणि नेहमीच स्पष्ट परिणाम नसतात. आणि दुसरे म्हणजे, या ऑब्जेक्टशी संबंधित चाइल्ड ऑब्जेक्ट्स असू शकतात, इ. त्यामुळे हटवण्याच्या परिस्थिती अनेकदा क्षुल्लक नसतात.