5.1 স্বয়ংক্রিয় ডেটা স্কিমা জেনারেশন

আপনি যখন প্রথম হাইবারনেট কনফিগার করেন, তখন আপনি অনেক আকর্ষণীয় সেটিংস সক্ষম করতে পারেন। এগুলো আগে আনিনি, যাতে স্প্রে করতে না হয়। তবে লেভেল শেষে তাদের কিছু কথা বলার কথা ভাবছি।

এই ধরনের প্রথম সেটিং হল hbm2ddl.auto. এটির 5টি ভিন্ন মান থাকতে পারে:

যাচাই করা বৈধকরণ: হাইবারনেট পরীক্ষা করবে যে কলাম এবং ক্ষেত্রের নাম এবং প্রকারগুলি ডাটাবেসে এবং টীকাতে মেলে কিনা। এটি সবচেয়ে সাধারণ মোড।
হালনাগাদ আপডেট: হাইবারনেট ডাটাবেসের টেবিলগুলিকে আপডেট করবে যদি তারা বা তাদের কলামগুলি প্রত্যাশার চেয়ে আলাদা হয়।
সৃষ্টি পুনরায় তৈরি করুন: হাইবারনেট ডাটাবেসের সমস্ত টেবিল মুছে ফেলবে এবং টীকা থেকে ডেটার উপর ভিত্তি করে তাদের পুনরায় তৈরি করবে।
সৃষ্টি-ড্রপ সৃষ্টি-মোছা। কাজের শুরুতে, হাইবারনেট সমস্ত টেবিল তৈরি করবে, কাজ শেষে, এটি নিজেই সেগুলি মুছে ফেলবে।
কোনটি হাইবারনেট কিছুই করবে না। যদি কোথাও ভিত্তিটি প্রত্যাশার সাথে মেলে না, তবে প্রশ্নগুলি সম্পাদনের সময় ত্রুটিগুলি নিক্ষেপ করা হবে।

5.2 লগিং অনুরোধ

হাইবারনেটের দ্বিতীয় খুব দরকারী সেটিং হল ডাটাবেসে এর সমস্ত অনুরোধের লগিং: ডাটাবেসের সমস্ত অনুরোধ কনসোলে নকল করা হয়। আপনি যদি হাইবারনেট সম্পর্কিত কোডে পরিবর্তন করেন তবে এটি একটি খুব দরকারী বৈশিষ্ট্য।

প্রথমত, আপনি আরও ভালভাবে বুঝতে পারবেন কিভাবে আপনার প্রশ্নগুলি এসকিউএল-এ রূপান্তরিত হয়। দ্বিতীয়ত, এটি সহজ এবং আগে আপনি ত্রুটিগুলি খুঁজে পেতে সক্ষম হবেন। এবং তারা অবশ্যই করবে। হাইবারনেট সবসময় আমাদের প্রত্যাশা অনুযায়ী কাজ করে না। এটি বিশেষত প্রায়শই টীকাগুলির সাথে যুক্ত হয়: আপনি সেগুলি আপনার নিজের উপায়ে বোঝেন এবং আপনার নিজের উপায়ে হাইবারনেট করুন৷

লগিং সক্ষম করে এমন সেটিং বলা হয় hibernate.show_sql। আপনি যদি এর মান সত্যে সেট করেন, তাহলে ডাটাবেসের প্রশ্নগুলি কনসোলে লেখা হবে। প্যারামিটারটি এটির সাথে একত্রে ব্যবহার করা হয় hibernate.format_sql, যা আপনাকে লগে একটি সুবিধাজনক SQL ক্যোয়ারী বিন্যাস সেট করতে দেয়।

ডাটাবেসে অনুরোধ লগ করার আরেকটি উপায় হল স্ট্যান্ডার্ড লগার ব্যবহার করা । হাইবারনেট ইতিমধ্যেই স্ট্যান্ডার্ড লগারে তার প্রশ্নগুলি লিখেছে, তবে শুধুমাত্র সুযোগের সাথে - ডিবাগ। আপনার স্ট্যান্ডার্ড লগারে আপনাকে দুটি বৈশিষ্ট্য পরিবর্তন করতে হবে:

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

BasicBinder- এর লেভেল পরিবর্তন করলে তা 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 এর বিভিন্ন সংস্করণ। অতএব, এই DBMS-এর সাথে কাজ করার জন্য, আপনাকে হাইবারনেটকে বলতে হবে যে SQL ভাষার কোন উপভাষা ব্যবহার করতে হবে।

এখানে সবচেয়ে জনপ্রিয় উপভাষাগুলির একটি তালিকা রয়েছে:

পোস্টগ্রেএসকিউএল org.hibernate.dialect.PostgreSQLDdialect
এসএপি ডিবি org.hibernate.dialect.SAPDBDialect
সাইবেস org.hibernate.dialect.SybaseDialect
ইনফরমিক্স org.hibernate.dialect.InformixDialect
মাইক্রোসফ্ট এসকিউএল সার্ভার 2008 org.hibernate.dialect.SQLServer2008Dialect
মাইএসকিউএল org.hibernate.dialect.MySQLDdialect
ওরাকল (যেকোন সংস্করণ) org.hibernate.dialect.OracleDialect
ওরাকল 11 গ্রাম org.hibernate.dialect.Oracle10gDialect

অবশ্যই, এই ধরনের উপভাষা যে কোন সংখ্যা হতে পারে. আপনি এটির জন্য আপনার নিজস্ব DBMS এবং আপনার নিজস্ব উপভাষা লিখতে পারেন।

কেন সঠিক উপভাষা উল্লেখ করা গুরুত্বপূর্ণ?

প্রতিটি ডাটাবেসে কিছুটা ভিন্ন ডাটা টাইপ থাকতে পারে। অতএব, হাইবারনেট থেকে আপনি যেভাবে আশা করেন ঠিক সেইভাবে কাজ করার জন্য, আপনাকে এসকিউএল ভাষার কোন উপভাষাটি ব্যবহার করতে হবে তা আপনাকে বলতে হবে।

এখানে একটি আকর্ষণীয় ছবি যা দেখায় যে কীভাবে সবকিছু বাস্তবে সংযুক্ত রয়েছে:

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
MySQL 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 সার্ভারের নাম এবং আপনি যে স্কিমার সাথে কাজ করবেন তার নাম উভয়ই।