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.SQL に debug を設定する方法の代替手段です。
例:
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 バッチフェッチのデフォルトサイズを設定します。
例: 推奨される値は
4 、 8 、 16 です。
|
hibernate.default_entity_mode | この SessionFactory から開かれたすべてのセッションに対するエンティティ表示のデフォルトモードを設定します。
dynamic-map 、 dom4j 、 pojo
|
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 より binary や serializable を読み書きする時にストリームを使用します。 システムレベルのプロパティです。
例:
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 |