كيف تعمل خاصية spring.jpa.hibernate.ddl-auto بالضبط في Spring؟



database-connection (1)

كنت أعمل في مشروع تطبيق تمهيد Spring الخاص بي ولاحظت أنه في بعض الأحيان يوجد خطأ في مهلة الاتصال بقاعدة البيانات الخاصة بي على خادم آخر (SQL Server). يحدث هذا بشكل خاص عندما أحاول القيام FlyWay بعض النصوص باستخدام FlyWay ولكنه يعمل بعد عدة محاولات.

ثم لاحظت أنني لم spring.jpa.hibernate.ddl-auto في ملف الخصائص الخاص بي. قمت ببعض الأبحاث ووجدت أنه يوصى بإضافة spring.jpa.hibernate.ddl-auto= create-drop في التطوير. وتغييره إلى: spring.jpa.hibernate.ddl-auto= none في الإنتاج.

لكنني لم أفهم بالفعل كيف يعمل حقًا وكيف يُنشئ السبات مخطط قاعدة البيانات باستخدام قيمة create-drop أو none قيمة. هل يمكن أن توضح من الناحية الفنية كيف تعمل حقًا ، وما هي التوصيات باستخدام هذه الخاصية في خادم التطوير والإنتاج. شكرا لك


بالنسبة للسجل ، فإن spring.jpa.hibernate.ddl-auto هي Spring Data JPA خاصة وهي طريقة لتحديد قيمة سيتم تمريرها في النهاية إلى Hibernate تحت الخاصية التي يعرفها ، hibernate.hbm2ddl.auto .

تؤثر القيم التي يتم تكوينها create-drop validate منها update بشكل أساسي على كيفية قيام إدارة أداة المخطط بمعالجة مخطط قاعدة البيانات عند بدء التشغيل.

على سبيل المثال ، ستقوم عملية update بالاستعلام عن واجهة برمجة التطبيقات الخاصة ببرنامج تشغيل JDBC للحصول على البيانات الأولية لقاعدة البيانات ، ثم يقوم Hibernate بمقارنة نموذج الكائن الذي يقوم بإنشائه استنادًا إلى قراءة الفئات المشروحة أو تعيينات XML لـ HBM وسيحاول ضبط المخطط أثناء التنقل.

ستحاول عملية update على سبيل المثال إضافة أعمدة أو قيود جديدة ، ولكنها لن تزيل أبدًا عمودًا أو قيدًا قد يكون موجودًا من قبل ولكن لم تعد موجودة كجزء من طراز الكائن من التشغيل السابق.

عادةً في سيناريوهات حالة الاختبار ، من المحتمل أنك ستستخدم create-drop بحيث يمكنك إنشاء المخطط الخاص بك ، تضيف حالة الاختبار الخاصة بك بعض البيانات وهمية ، تقوم بتشغيل الاختبارات الخاصة بك ، ثم أثناء تنظيف حالة الاختبار ، يتم إسقاط كائنات المخطط ، وترك قاعدة بيانات فارغة.

في التطوير ، من الشائع غالبًا رؤية المطورين يستخدمون update لتعديل المخطط تلقائيًا لإضافة إضافات جديدة عند إعادة التشغيل. لكن مرة أخرى ، تفهم أن هذا لا يزيل عمودًا أو قيدًا قد يكون موجودًا من عمليات الإعدام السابقة التي لم تعد ضرورية.

في الإنتاج ، يوصى بشدة بعدم استخدام none أو ببساطة عدم تحديد هذه الخاصية. ذلك لأنه من الممارسات الشائعة لمراجع قاعدة البيانات مراجعة نصوص الترحيل لتغييرات قاعدة البيانات ، خاصةً إذا كانت قاعدة البيانات الخاصة بك مشتركة عبر خدمات وتطبيقات متعددة.





ddl