5.1 स्वचालित डेटा स्कीमा जनरेशन

जब आप पहली बार हाइबरनेट को कॉन्फ़िगर करते हैं, तो आप बहुत सी दिलचस्प सेटिंग्स को सक्षम कर सकते हैं। मैं उन्हें पहले नहीं लाया, ताकि छिड़काव न हो। लेकिन स्तर के अंत में मैं उनमें से कुछ के बारे में बताना चाहता हूं।

इस तरह की पहली सेटिंग है hbm2ddl.auto। इसके 5 अलग-अलग मान हो सकते हैं:

मान्य सत्यापन: हाइबरनेट जाँच करेगा कि क्या कॉलम और फ़ील्ड नाम और प्रकार डेटाबेस और एनोटेशन में मेल खाते हैं। यह सबसे आम विधा है।
अद्यतन अद्यतन: हाइबरनेट डेटाबेस में तालिकाओं को अद्यतन करेगा यदि वे या उनके स्तंभ अपेक्षा से भिन्न हैं।
बनाएं रीक्रिएट: हाइबरनेट डेटाबेस में सभी तालिकाओं को हटा देगा और एनोटेशन से डेटा के आधार पर उन्हें फिर से बनाएगा।
create-drop रचना-विलोपन। काम की शुरुआत में, हाइबरनेट काम के अंत में सभी तालिकाओं का निर्माण करेगा, यह उन्हें खुद के बाद हटा देगा।
कोई नहीं हाइबरनेट कुछ भी नहीं करेगा। यदि कहीं आधार अपेक्षा से मेल नहीं खाता है, तो प्रश्नों के निष्पादन के दौरान त्रुटियां डाली जाएंगी।

5.2 लॉगिंग अनुरोध

हाइबरनेट की दूसरी बहुत उपयोगी सेटिंग डेटाबेस के लिए इसके सभी अनुरोधों का लॉगिंग है: डेटाबेस के सभी अनुरोधों को कंसोल में डुप्लिकेट किया गया है। यदि आप हाइबरनेट संबंधित कोड में परिवर्तन कर रहे हैं तो यह एक बहुत ही उपयोगी विशेषता है।

पहले, आप बेहतर ढंग से समझेंगे कि आपके प्रश्नों को SQL में कैसे बदला जाता है। दूसरे, यह आसान है और पहले आप त्रुटियों को खोजने में सक्षम होंगे। और वे निश्चित रूप से करेंगे। हाइबरनेट हमेशा हमारी अपेक्षा के अनुरूप काम नहीं करता है। यह विशेष रूप से अक्सर एनोटेशन से जुड़ा होता है: आप उन्हें अपने तरीके से समझते हैं, और अपने तरीके से हाइबरनेट करते हैं।

लॉगिंग को सक्षम करने वाली सेटिंग कहलाती है hibernate.show_sql। यदि आप इसका मान सही पर सेट करते हैं, तो डेटाबेस के लिए क्वेरीज़ कंसोल पर लिखी जाएंगी। पैरामीटर का उपयोग इसके साथ संयोजन में भी किया जाता है hibernate.format_sql, जो आपको लॉग में एक सुविधाजनक SQL क्वेरी प्रारूप सेट करने की अनुमति देता है।

डेटाबेस के लिए अनुरोधों को लॉग करने का दूसरा तरीका मानक लॉगर का उपयोग करना है । सब कुछ इस तथ्य में दिया गया है कि हाइबरनेट पहले से ही मानक लॉगर को अपने प्रश्न लिखता है, लेकिन केवल दायरे के साथ - DEBUG। आपको अपने मानक लकड़हारे में दो गुणों को बदलने की आवश्यकता है:

logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace

बेसिकबाइंडर के स्तर को बदलने से traceहमारे लिए क्वेरी पैरामीटर जुड़ जाएंगे, हालांकि, थोड़े असामान्य रूप में - क्वेरी के बाद अनुक्रमिक गणना।

तीसरा दृष्टिकोण डेटाबेस के लिए एक विशेष प्रॉक्सी ड्राइवर का उपयोग करना है ।

उदाहरण के लिए, log4jdbcया p6spy। दोनों प्रॉक्सी काम कर रहे हैं और शुरुआत कर रहे हैं, हालांकि log4jdbcलेखन के समय लंबे समय तक कोई प्रतिबद्धता नहीं थी।


<dependency>
    <groupId>com.integralblue</groupId>
    <artifactId>log4jdbc-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>com.github.gavlyukovskiy</groupId>
    <artifactId>p6spy-spring-boot-starter</artifactId>
</dependency>

मैं विवरण में नहीं जाऊंगा, मैं सिर्फ आपको बताना चाहता हूं कि यह संभव है।

5.3 SQL बोलियाँ

और कुछ और पृष्ठभूमि की जानकारी।

हाइबरनेट बहुत बड़ी संख्या में DBMS का समर्थन करता है। उनमें से प्रत्येक SQL कार्यों के एक मानक सेट और अपने स्वयं के कुछ और लागू करता है। या SQL के विभिन्न संस्करण। इसलिए, इन DBMS के साथ काम करने के लिए, आपको हाइबरनेट को बताना होगा कि SQL भाषा की कौन सी बोली का उपयोग करना है।

यहां सबसे लोकप्रिय बोलियों की सूची दी गई है:

पोस्टग्रेएसक्यूएल org.hibernate.dialect.PostgreSQLDialect
एसएपी डीबी org.hibernate.dialect.SAPDBDialect
साइबेस org.hibernate.dialect.SybaseDialect
इन्फोर्मिक्स org.hibernate.dialect.InformixDialect
माइक्रोसॉफ्ट एसक्यूएल सर्वर 2008 org.hibernate.dialect.SQLServer2008Dialect
माई एसक्यूएल org.hibernate.dialect.MySQLDialect
ओरेकल (कोई भी संस्करण) org.hibernate.dialect.OracleDialect
ओरेकल 11 जी org.hibernate.dialect.Oracle10gDialect

बेशक, ऐसी बोलियों की संख्या कितनी भी हो सकती है। आप इसके लिए अपना स्वयं का DBMS और अपनी बोली लिख सकते हैं।

सही बोली निर्दिष्ट करना क्यों महत्वपूर्ण है?

प्रत्येक डेटाबेस में थोड़ा भिन्न डेटा प्रकार हो सकते हैं। इसलिए, हाइबरनेट को पूरी तरह से ठीक उसी तरह से काम करने के लिए जिस तरह से आप उससे उम्मीद करते हैं, आपको उसे यह बताना होगा कि उसे SQL भाषा की कौन सी बोली का उपयोग करने की आवश्यकता है।

यहाँ एक दिलचस्प तस्वीर है जो दिखाती है कि वास्तविकता में सब कुछ कैसे जुड़ा हुआ है:

5.4 लोकप्रिय सेटिंग्स

आपके जीवन को आसान बनाने के लिए, यहां कई सेटिंग की पूरी सूची दी गई है:

मायएसक्यूएल 8.0
hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
hibernate.connection.driver_class=com.mysql.cj.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/test
hibernate.connection.username=root
hibernate.connection.password=secret
hibernate.show_sql=true
hibernate.hbm2ddl=validate
मायएसक्यूएल 5.0
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/test
hibernate.connection.username=root
hibernate.connection.password=secret
hibernate.show_sql=true
hibernate.hbm2ddl=validate
पोस्टग्रेएसक्यूएल
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.connection.driver_class= org.postgresql.Driver
hibernate.connection.url= jdbc:postgresql://localhost/test
hibernate.connection.username=root
hibernate.connection.password=secret
hibernate.show_sql=true
hibernate.hbm2ddl=validate

MySQL 8.0 MySQL 5.0 की तुलना में अधिक सुविधाओं का समर्थन करता है, इसलिए यदि आप हाइबरनेट को उनमें से अधिकतर बनाना चाहते हैं, तो सही बोली निर्दिष्ट करें।

H2 डेटाबेस आमतौर पर मेमोरी में संग्रहीत होता है, इसलिए mem:testSQL सर्वर का नाम और उस स्कीमा का नाम है जिसके साथ आप काम करेंगे।