3.3. JDBC 接続

org.hibernate.SessionFactoryが JDBC 接続を作成しプーリングすることが推奨されます。 この場合、 次のように簡単に org.hibernate.Session を開くことができます。
Session session = sessions.openSession(); // open a new Session
データベースへのアクセスが必要となるタスクを開始すると、 プールより JDBC 接続が取得されます。
その前に、 JDBC 接続のプロパティを Hibernate に渡す必要があります。 Hibernate のプロパティ名とセマンティックはすべて org.hibernate.cfg.Environment クラス上で定義されます。 JDBC 接続で最も重要となる設定は次の通りです。
次のプロパティを設定すると、 Hibernate は java.sql.DriverManager を使用して接続を取得し、 プーリングします。

表3.1 Hibernate JDBC プロパティ

プロパティ名 目的
hibernate.connection.driver_class JDBC ドライバクラス
hibernate.connection.url JDBC の URL
hibernate.connection.username データベースユーザー
hibernate.connection.password データベースユーザーのパスワード
hibernate.connection.pool_size プーリングされた接続の最大数
Hibernate 独自の接続プールアルゴリズムは非常に初歩的なものです。 これは、 ユーザーがすぐ Hibernate を使用できるようにするためのアルゴリズムで、 実稼働システムやパフォーマンステスト向けのものではありません。 最良のパフォーマンスや安定性を実現するには、 サードパーティーのプールを使用してください。 Hibernate の内部プールを無効にするには、 hibernate.connection.pool_size プロパティを接続プール固有の設定に置き換えます。 c3p0 を使用する場合の例は次のようになります。
C3P0 はオープンソースの JDBC 接続プールで、 Hibernate の lib ディレクトリにあります。 hibernate.c3p0.* プロパティを設定すると、 Hibernate は org.hibernate.connection.C3P0ConnectionProvider を接続プーリングに使用します。 Proxool を使用したい場合は、 パッケージ化された hibernate.properties と Hibernate の Web サイトを参照してください。
以下は c3p0 の hibernate.properties ファイルの例になります。
hibernate.connection.driver_class = org.postgresql.Driver
hibernate.connection.url = jdbc:postgresql://localhost/mydatabase
hibernate.connection.username = myuser
hibernate.connection.password = secret
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
アプリケーションサーバー内で使用する場合、 Hibernate を設定し、 JNDI に登録されているアプリケーションサーバーの javax.sql.Datasource より接続を取得するようにします。 最低でも次のプロパティを 1 つ設定する必要があります。

表3.2 Hibernate データソースプロパティ

プロパティ名 目的
hibernate.connection.datasource データソースの JNDI 名
hibernate.jndi.url JNDI プロバイダの URL (オプション)
hibernate.jndi.class JNDI InitialContextFactory のクラス (オプション)
hibernate.connection.username データベースユーザ (オプション)
hibernate.connection.password データベースユーザのパスワード (オプション)
次は、 アプリケーションサーバーが提供する JNDI データソースの hibernate.properties ファイルの例になります。
hibernate.connection.datasource = java:/comp/env/jdbc/test
hibernate.transaction.factory_class = \
    org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_lookup_class = \
    org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
JNDI データソースから取得した JDBC コネクションは、アプリケーションサーバーのコンテナ管理トランザクションに自動的に参加します。
任意の接続プロパティを提供するには、 hibernate.connnection を接続プロパティ名の前に追加します。 例えば、 hibernate.connection.charSet を使用した場合、 charSet 接続プロパティを指定できます。
JDBC 接続を取得するため独自のプラグイン戦略を定義するには、 org.hibernate.connection.ConnectionProvider インターフェースを実装し、 hibernate.connection.provider_class プロパティよりカスタム実装を指定します。