3.4. オプションの設定プロパティ

ランタイム時に Hibernate の挙動を制御する他のプロパティも複数あります。 これらのプロパティはすべて任意で、 妥当なデフォルト値を持っています。

警告

これらのプロパティの一部はシステムレベルのみのプロパティです。 システムレベルのプロパティは、 java -Dproperty=value または hibernate.properties でのみ設定可能で、 上記の他の方法では設定できません。

表3.3 Hibernate 設定プロパティ

プロパティ名 目的
hibernate.dialect 特定のリレーショナルデータベースに対して最適化された SQL を Hibernate が生成できるようにする、 Hibernate org.hibernate.dialect.Dialect のクラス名です。
例: full.classname.of.Dialect
ほとんどの場合で、 Hibernate は JDBC ドライバによって返された JDBC metadata を基に適切な org.hibernate.dialect.Dialect 実装を選択することができます。
hibernate.show_sql 発行されたすべての SQL をコンソールに出力します。これはログカテゴリの org.hibernate.SQLdebug を設定する方法の代替手段です。
例: true | false
hibernate.format_sql ログとコンソールで SQL のプリティプリントを行います。
例: true | false
hibernate.default_schema 非修飾テーブル名を生成された SQL のスキーマやテーブル空間で修飾します。
例: SCHEMA_NAME
hibernate.default_catalog 生成された SQL のカタログで非修飾テーブル名を修飾します。
例: CATALOG_NAME
hibernate.session_factory_name 作成後、 org.hibernate.SessionFactory は JNDI でこの名前へ自動的にバインドされます。
例: jndi/composite/name
hibernate.max_fetch_depth 単一終端関連 (一対一、多対一) に対し、 外部結合によるフェッチツリーの最大の「深さ」を設定します。 0 を指定すると、 デフォルトの外部結合フェッチが無効になります。
例: 推奨される 0 から 3 までの値
hibernate.default_batch_fetch_size 関連の Hibernate バッチフェッチのデフォルトサイズを設定します。
例: 推奨される値は 4816 です。
hibernate.default_entity_mode この SessionFactory から開かれたすべてのセッションに対するエンティティ表示のデフォルトモードを設定します。
dynamic-mapdom4jpojo
hibernate.order_updates 更新された項目の主キー値によって SQL の更新を順番付けするよう Hibernate を強制します。 これにより、 並行性の高いシステムにおけるトランザクションのデッドロックが軽減されます。
例: true | false
hibernate.generate_statistics 有効の場合、 Hibernate はパフォーマンスチューニングに有効な統計情報を収集します。
例: true | false
hibernate.use_identifier_rollback 有効の場合、オブジェクトが削除されたときに識別子プロパティをリセットし、デフォルト値にしたものを生成します。
例: true | false
hibernate.use_sql_comments 有効の場合、 SQL 内にコメントを生成します。これはデバックを容易にします。デフォルトの値は false です。
例: true | false

表3.4 Hibernate JDBC とコネクションプロパティ

プロパティ名 目的
hibernate.jdbc.fetch_size 値が0でない場合、 JDBC フェッチサイズを決定します ( Statement.setFetchSize() を呼びます)。
hibernate.jdbc.batch_size 値が0でない場合、 Hibernate が JDBC2 バッチ更新を使用します。
例: 推奨される 5 から 30 までの値
hibernate.jdbc.batch_versioned_data JDBC ドライバが executeBatch() より正しい行数を返す場合は、 このプロパティを true に設定します。 通常、 このオプションを有効にすると安全です。 Hibernate は自動的にバージョン化されたデータにバッチ DML を使用します。 デフォルト値は false になります。
例: true | false
hibernate.jdbc.factory_class カスタム org.hibernate.jdbc.Batcher を選択します。 この設定プロパティはほとんどのアプリケーションには必要ありません。
例: classname.of.BatcherFactory
hibernate.jdbc.use_scrollable_resultset Hibernate による JDBC2 のスクロール可能な結果セットの使用を有効にします。 このプロパティはユーザーが提供する JDBC 接続を使用する場合のみ必要となります。 ユーザー提供による JDBC 接続を使用しない場合、 Hibernate は接続メタデータを使用します。
例: true | false
hibernate.jdbc.use_streams_for_binary JDBC に対しまたは JDBC より binaryserializable を読み書きする時にストリームを使用します。 システムレベルのプロパティです。
例: true | false
hibernate.jdbc.use_get_generated_keys 挿入の後にネーティブに生成されたキーを読み出すため、 JDBC3 PreparedStatement.getGeneratedKeys() の使用を有効にします。 JDBC3+ ドライバと JRE1.4+ を必要とし、 Hibernate の識別子ジェネレータに問題が発生する場合は false を設定します。 デフォルトでは、 設定メタデータを使用してドライバの能力を判断しようとします。
例: true|false
hibernate.connection.provider_class JDBC 接続を Hibernate に提供するカスタム org.hibernate.connection.ConnectionProvider のクラス名です。
例: classname.of.ConnectionProvider
hibernate.connection.isolation JDBC トランザクション分離レベルを設定します。 妥当な値は java.sql.Connection をチェックしてください。 データベースのほとんどはすべての分離レベルをサポートしておらず、 非標準の分離を追加で定義するデータベースもあります。
例: 1, 2, 4, 8
hibernate.connection.autocommit JDBC でプーリングされる接続の自動コミットを有効にします (非推奨)。
例: true | false
hibernate.connection.release_mode Hibernate が いつ JDBC 接続をリリースするか指定します。 デフォルトでは、 セッションが明示的に閉じられるか切断されるまで JDBC 接続が保持されます。 アプリケーションサーバーの JTA データソースの場合、 after_statement を使用して各 JDBC 呼び出しの後に積極的に接続をリリースします。 非 JTA 接続では、 after_transaction を使用して各トランザクションの最後に接続をリリースするとよいでしょう。 auto は JTA や CMT トランザクション戦略に対して after_statement を選択し、 JDBC トランザクション戦略に対して after_transaction を選択します。
例: auto (デフォルト) | on_close | after_transaction | after_statement
この設定は SessionFactory.openSession から返された Session のみに影響します。 SessionFactory.getCurrentSession より取得された Session では、 使用するために設定された CurrentSessionContext 実装がこれら Session の接続リリースモードを制御します。 詳細は「コンテキストのセッション」 を参照してください。
hibernate.connection.<propertyName> JDBC プロパティ <propertyName>DriverManager.getConnection() に渡します。
hibernate.jndi.<propertyName> プロパティ <propertyName> を JNDI InitialContextFactory に渡します。

表3.5 Hibernate キャッシュプロパティ

プロパティ名 目的
hibernate.cache.provider_class カスタム CacheProvider のクラス名です。
例: classname.of.CacheProvider
hibernate.cache.use_minimal_puts 書き込みを最小限にするために読み取りの頻度を増やし、 2 次キャッシュの操作を最適化します。 この設定はクラスタ化キャッシュで最も有用です。 Hibernate3 ではクラスタ化キャッシュ実装向けにデフォルトで有効になっています。
例: true|false
hibernate.cache.use_query_cache クエリキャッシュを有効にします。 各クエリをキャッシュ可能として設定する必要があります。
例: true|false
hibernate.cache.use_second_level_cache 2 次キャッシュを完全に無効にするため使用できます。 2 次キャッシュは <cache> マッピングを指定するクラスではデフォルトで有効になっています。
例: true|false
hibernate.cache.query_cache_factory カスタム QueryCache インターフェースのクラス名を指定します。デフォルトでは StandardQueryCache になります。
例: classname.of.QueryCache
hibernate.cache.region_prefix 二次キャッシュの領域名の接頭辞です。
例: prefix
hibernate.cache.use_structured_entries 二次キャッシュに格納するデータを、人が理解しやすいフォーマットにします。
例: true|false
hibernate.query.plan_cache_max_strong_references キャッシュで保持される強参照 (Strong reference) の最大数を設定します。
例: 128 (default)
hibernate.query.plan_cache_max_soft_references キャッシュで保持されるソフト参照 (Soft reference) の最大数を設定します。この値をInteger.MAX_VALUE に設定すると、5.1.1 以前のバージョンと同じ動作を複製します。
例: 2048 (default)

表3.6 Hibernate トランザクションプロパティ

プロパティ名 目的
hibernate.transaction.factory_class Hibernate Transaction API と一緒に使われる TransactionFactory のクラス名です。 (デフォルトでは JDBCTransactionFactory です)。
例: classname.of.TransactionFactory>
jta.UserTransaction アプリケーションサーバーから JTA UserTransaction を取得するために JTATransactionFactory に使われる JNDI 名です。
例: jndi/composite/name
hibernate.transaction. manager_lookup_class TransactionManagerLookup のクラス名です。 JTA 環境において、 JVM レベルのキャッシュを有効にする時や、 hilo ジェネレータが使用される時に必要となります。
例: classname.of.TransactionManagerLookup
hibernate.transaction. flush_before_completion 有効の場合、 トランザクションの completion フェーズの前に自動的にセッションをフラッシュします。 内蔵の自動セッションコンテキスト管理に適しています。 「コンテキストのセッション」 を参照してください。
例: true | false
hibernate.transaction. auto_close_session 有効の場合、 トランザクションの completion フェーズの後にセッションを自動的にクローズします。内蔵の自動セッションコンテキスト管理に適しています。 「コンテキストのセッション」 を参照してください。
例: true | false

表3.7 その他のプロパティ

プロパティ名 目的
hibernate. current_session_context_class 「現在の」 Session のスコーピングに対するカスタム戦略を提供します。 ビルトイン戦略に関する詳細は 「コンテキストのセッション」 を参照してください。
例: jta | thread | managed | custom.Class
hibernate.query.factory_class HQL パーサーの実装を選択します。
例: org.hibernate.hql.ast.ASTQueryTranslatorFactory または org.hibernate.hql.classic.ClassicQueryTranslatorFactory
hibernate.query.substitutions Hibernate クエリのトークンより SQL のトークンをマッピングするため使用します (トークンは関数やリテラル名になることがあります)。
例: hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC
hibernate.hbm2ddl.auto SessionFactory を生成された時に、 自動的にスキーマ DDL を有効にするか、 データベースにエクスポートします。 create-drop の場合、 SessionFactory が明示的に閉じられた時に、 データベーススキーマがドロップされます。
例: validate | update | create | create-drop
hibernate.cglib. use_reflection_optimizer ランタイム時のリフレクションの代わりに CGLIB の使用を有効にします (システムレベルのプロパティ)。 リフレクションはトラブルシューティングの時に役立つことがあります。 オプティマイザがオフになっている場合でも Hibernate は常に CGLIB を必要とします。 このプロパティは hibernate.cfg.xml に設定することができません。
例: true | false

3.4.1. SQL 方言

hibernate.dialect プロパティには、 常にデータベースの正しい org.hibernate.dialect.Dialect サブクラスを設定してください。方言を指定すると、Hibernate は上記一覧の他の一部プロパティに対して賢明なデフォルトを使用します。そのため、手作業で指定する必要がありません。

表3.8 Hibernate SQL Dialects (hibernate.dialect)

RDBMS 方言
DB2 org.hibernate.dialect.DB2Dialect
DB2 AS/400 org.hibernate.dialect.DB2400Dialect
DB2 OS390 org.hibernate.dialect.DB2390Dialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
MySQL org.hibernate.dialect.MySQL5Dialect
MySQL with InnoDB org.hibernate.dialect.MySQL5InnoDialect
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version) org.hibernate.dialect.Oracle8iDialect
Oracle 9i org.hibernate.dialect.Oracle9iDialect
Oracle 10g org.hibernate.dialect.Oracle10gDialect
Sybase org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server org.hibernate.dialect.SQLServerDialect
Microsoft SQL Server 2008 org.hibernate.dialect.SQLServer2008Dialect
SAP DB org.hibernate.dialect.SAPDBDialect
Informix org.hibernate.dialect.InformixDialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Ingres org.hibernate.dialect.IngresDialect
Progress org.hibernate.dialect.ProgressDialect
Mckoi SQL org.hibernate.dialect.MckoiDialect
Interbase org.hibernate.dialect.InterbaseDialect
Pointbase org.hibernate.dialect.PointbaseDialect
FrontBase org.hibernate.dialect.FrontbaseDialect
Firebird org.hibernate.dialect.FirebirdDialect