5.1 データスキーマの自動生成

Hibernate を初めて構成するときに、多くの興味深い設定を有効にすることができます。スプレーしないように、以前は持ってきませんでした。しかし、レベルの終わりに、私はそれらのうちのいくつかを伝えるべきことを考えます。

最初の設定は ですhbm2ddl.auto。5 つの異なる値を指定できます。

検証 検証: Hibernate は、列とフィールドの名前と型がデータベースと注釈で一致するかどうかをチェックします。これは最も一般的なモードです。
アップデート 更新: Hibernate は、データベース内のテーブルまたはその列が予期したものと異なる場合に更新します。
作成 再作成: Hibernate はデータベース内のすべてのテーブルを削除し、アノテーションのデータに基づいてテーブルを再作成します。
作成-ドロップ 作成-削除。作業の開始時に Hibernate はすべてのテーブルを作成し、作業の終了時にそれらを削除します。
なし Hibernate はまったく何もしません。ベースが期待と一致しない場合は、クエリの実行中にエラーがスローされます。

5.2 リクエストのロギング

Hibernate の 2 番目の非常に便利な設定は、データベースへのすべてのリクエストのログ記録です。データベースへのすべてのリクエストはコンソールに複製されます。これは、Hibernate 関連のコードを変更する場合に非常に便利な機能です。

まず、クエリがどのように SQL に変換されるかをよりよく理解できるようになります。次に、エラーをより簡単に、より早く発見できるようになります。そして彼らは間違いなくそうするだろう。Hibernate は常に期待どおりに機能するとは限りません。これは特に注釈に関連することが多く、自分なりの方法で注釈を理解し、自分なりの方法で Hibernate を実行します。

ロギングを有効にする設定は と呼ばれますhibernate.show_sql。この値を true に設定すると、データベースへのクエリがコンソールに書き込まれます。このパラメータは it と組み合わせて使用​​することもできhibernate.format_sql、ログ内に便利な SQL クエリ形式を設定できます。

リクエストをデータベースに記録するもう 1 つの方法は、標準のロガーを使用することです。Hibernate はすでにクエリを標準ロガーに書き込んでいますが、スコープが DEBUG であるという事実だけですべてがわかります。標準ロガーの 2 つのプロパティを変更する必要があります。

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

BasicBinderのレベルを に変更するとtrace、クエリ パラメータが少し変わった形式で追加されます。つまり、クエリ自体の後に順次列挙されます。

3 番目の方法は、データベースに特別なプロキシ ドライバーを使用することです。

たとえば、log4jdbcまたはp6spylog4jdbc執筆時点では長い間コミットがありませんでしたが、どちらのプロキシも機能しておりスターターがあります。


<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 方言

さらに背景情報もいくつかあります。

Hibernate は非常に多くの DBMS をサポートします。それぞれの関数は、SQL 関数の標準セットと独自の関数をいくつか実装しています。または SQL の異なるバージョン。したがって、これらの DBMS を操作するには、SQL 言語のどの言語を使用するかを Hibernate に指示する必要があります。

最も人気のある方言のリストは次のとおりです。

PostgreSQL org.hibernate.dialect.PostgreSQLDialect
SAP DB org.hibernate.dialect.SAPDBDialect
サイベース org.hibernate.dialect.SybaseDialect
インフォミックス org.hibernate.dialect.InformixDialect
Microsoft SQL Server 2008 org.hibernate.dialect.SQLServer2008Dialect
MySQL org.hibernate.dialect.MySQLDialect
Oracle (任意のバージョン) org.hibernate.dialect.OracleDialect
オラクル 11g org.hibernate.dialect.Oracle10gDialect

もちろん、そのような方言はいくらでも存在する可能性があります。独自の DBMS とその方言を作成できます。

正しい方言を指定することがなぜ重要なのでしょうか?

各データベースのデータ型は若干異なる場合があります。したがって、Hibernate が期待どおりに完全に動作するには、SQL 言語のどの方言を使用する必要があるかを Hibernate に伝える必要があります。

以下は、現実にすべてがどのように接続されているかを示す興味深い図です。

5.4 一般的な設定

作業を楽にするために、いくつかの設定の完全なリストを以下に示します。

MySQL 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
PostgreSQL
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 よりも多くの機能をサポートしているため、Hibernate ですべての機能を最大限に活用したい場合は、正しい方言を指定してください。

通常、H2 データベースはメモリに保存され、mem:testSQL サーバーの名前と作業するスキーマの名前の両方が保存されます。