Hibernate hbm2ddl.auto: मान, उदाहरण और आंतरिक कार्यप्रणाली

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: hbm2ddl.auto क्यों एक वरदान और सिरदर्द दोनों है

\n\n

जिसने भी कभी Hibernate (या Spring Boot + JPA) कॉन्फ़िगर किया है, उसने application.properties या hibernate.cfg.xml में यह रहस्यमयी लाइन ज़रूर देखी होगी:

\n\n
spring.jpa.hibernate.ddl-auto=update\n# या\nhibernate.hbm2ddl.auto=create\n
\n\n

Stack Overflow पर इस सवाल ने लाखों व्यूज़ जुटाए हैं। और यह सही भी है: गलत मान आपका डेटा नष्ट कर सकता है, जबकि सही मान घंटों की मेहनत बचा सकता है। इस लेख में हम hibernate.hbm2ddl.auto के सभी संभावित मानों को समझेंगे, Java कोड के वास्तविक उदाहरण दिखाएंगे, और यह जानेंगे कि Hibernate डेटाबेस स्कीमा को कैसे मैनेज करता है।

\n\n

hbm2ddl.auto क्या है और इसकी ज़रूरत क्यों है?

\n\n

Hibernate hbm2ddl.auto एक कॉन्फ़िगरेशन पैरामीटर है जो आपकी Entities के आधार पर डेटाबेस स्कीमा को ऑटोमैटिक बनाने, अपडेट करने या जांचने का काम करता है। दूसरे शब्दों में, Hibernate @Entity, @Table, @Column एनोटेशन वाली क्लासेज़ को देखता है और तुरंत CREATE TABLE, ALTER TABLE जैसे SQL क्वेरी जनरेट करता है।

\n\n

यह डेवलपमेंट के दौरान बेहद उपयोगी है, लेकिन प्रोडक्शन में यह आपदा का कारण बन सकता है अगर आप यह नहीं समझते कि प्रत्येक मान आंतरिक रूप से कैसे काम करता है।

\n\n

hibernate.hbm2ddl.auto के सभी संभावित मान

\n\n

Hibernate पाँच मानों को सपोर्ट करता है (साथ ही none जो कोई कार्रवाई नहीं करता):

\n\n
    \n
  • validate — केवल स्कीमा की जाँच
  • \n
  • update — ऑटोमैटिक अपडेट
  • \n
  • create — स्टार्टअप पर नया निर्माण
  • \n
  • create-drop — स्टार्टअप पर निर्माण और शटडाउन पर हटाना
  • \n
  • none — कुछ न करें (डिफ़ॉल्ट मान)
  • \n
\n\n

आइए प्रत्येक मान को विस्तार से समझें, उदाहरणों और आंतरिक कार्यप्रणाली के साथ।

\n\n

1. validate — जाँच, लेकिन बदलाव नहीं

\n\n

यह कैसे काम करता है: एप्लिकेशन स्टार्ट होने पर Hibernate आपकी Java Entities की तुलना डेटाबेस में मौजूद टेबल संरचना से करता है। अगर सब कुछ मेल खाता है — एप्लिकेशन शुरू होता है। अगर नहीं — Hibernate SchemaValidationException फेंकता है।

\n\n

कॉन्फ़िगरेशन उदाहरण:

\n\n
// application.properties\nspring.jpa.hibernate.ddl-auto=validate\n
\n\n

Entity उदाहरण:

\n\n
@Entity\n@Table(name = "users")\npublic class User {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n    \n    @Column(name = "email", nullable = false, length = 255)\n    private String email;\n    \n    @Column(name = "age")\n    private Integer age;\n}\n
\n\n

आंतरिक रूप से क्या होता है: Hibernate Entity के मेटाडेटा को पढ़ता है, users टेबल का आंतरिक प्रतिनिधित्व बनाता है जिसमें id, email (NOT NULL, लंबाई 255), age कॉलम होते हैं। फिर यह information_schema (या आपके DB के समकक्ष) पर SQL क्वेरी चलाता है और टाइप, nullable, लंबाई की तुलना करता है। अगर DB में email कॉलम का टाइप VARCHAR(100) है — तो एरर आएगी।

\n\n

कब उपयोग करें: प्रोडक्शन के लिए आदर्श, यह सुनिश्चित करने के लिए कि माइग्रेशन (Liquibase/Flyway) ने कोड के साथ संगति नहीं तोड़ी है।

\n\n

2. update — ऑटोमैटिक अपडेट (सावधानी से!)

\n\n

यह कैसे काम करता है: Hibernate स्वचालित रूप से नई टेबल, कॉलम और कंस्ट्रेंट जोड़ता है अगर वे DB में मौजूद नहीं हैं। लेकिन यह कभी भी कॉलम या टेबल को नहीं हटाता, भले ही आपने उन्हें Java कोड से हटा दिया हो।

\n\n

कॉन्फ़िगरेशन उदाहरण:

\n\n
// application.properties\nspring.jpa.hibernate.ddl-auto=update\n
\n\n

बदलाव का उदाहरण:

ब्लॉग

पुस्तक अनुशंसाएँ