liguofeng29’s blog

個人勉強用ブログだっす。

Hibernate - 設定ファイル概要

Hibernateの永久化クラスの操作はSessionFactoryを離れない。
SessionFactoryはConfigurationオブジェクトから生成され、逆にConfigurationの唯一の機能はSessionFactoryに生成であり、生成後は破棄される。

Configurationの三つの生成方法

package dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

public abstract class DaoSupport {
    protected Session getSession() {

        // 1. hibernate.cfg.xmlでConfiguration生成
        Configuration conf = new Configuration()
        // 引数なし : hibernate.cfg.xml
        // 引数あり : 引数の設定ファイル
                .configure();

        // // 2. hibernate.properitesでConfiguration生成
        // Configuration conf = new Configuration()
        // // 永久化クラス追加
        // .addAnnotatedClass(entity.Item.class);

        // 3. コードだけでConfiguration生成
        // Configuration conf = new Configuration()
        // // 永久化クラス追加
        // .addAnnotatedClass(entity.Item.class)
        // // プロパティ設定
        // .setProperty("hibernate.connection.driver_class","com.mysql.jdbc.Driver")
        // .setProperty("hibernate.connection.url","jdbc:mysql://localhost/hibernate")
        // .setProperty("hibernate.connection.username", "root")
        // .setProperty("hibernate.connection.password", "xxxxx")
        // .setProperty("hibernate.c3p0.max_size", "20")
        // .setProperty("hibernate.c3p0.min_size", "1")
        // .setProperty("hibernate.c3p0.timeout", "5000")
        // .setProperty("hibernate.c3p0.max_statements", "100")
        // .setProperty("hibernate.c3p0.idle_test_period", "3000")
        // .setProperty("hibernate.c3p0.acquire_increment", "2")
        // .setProperty("hibernate.c3p0.validate", "true")
        // .setProperty("hibernate.dialect","org.hibernate.dialect.MySQL5InnoDBDialect")
        // .setProperty("show_sql","true")
        // .setProperty("hibernate.format_sql","true");

        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                .applySettings(conf.getProperties()).build();

        // SessionFactory生成
        SessionFactory sf = conf.buildSessionFactory(serviceRegistry);
        // Session生成
        Session session = sf.openSession();

        return session;
    }
}

Configurationの属性

  • JDBC接続

    • hibernate.connection.driver_class
    • hibernate.connection.url
    • hibernate.connection.username
    • hibernate.connection.password
    • hibernate.connection.pool_size : 実際のプロジェクトではC3P0かProxoolを使うのが性能面でよい
    • ほか色々
  • RDMSの方言

    • hieernate.dialect : DB方言解消

      • org.hibernate.dialect.MySQL5InnoDBDialect
      • org.hibernate.dialect.PostgreSQL82Dialect
      • org.hibernate.dialect.Oracle10gDialect
      • ほか色々
  • JNDI(Java Naming Directory Interface): Hibernateがデータを直接管理しない場合

  • Hibernateトランザクション

    • hibernate.transaction.factory_class : HibernateのTX工場指定。TransactionFactoryかサブクラスである。
    • hibernate.transaction.manager_lookup_class : うん・・・
    • hibernate.transaction.flush_before_completion : TX終了後、flushするか
    • hibernate.transaction.auto_close_session : TX終了後、sessionを閉じるか
    • jta.UserTransaction : JNDI名を指定し、JTATransactionFactoryを使いアプリからJTA UserTransactionを取得する
  • 2次キャッシュ

  • ほか

    • hibernate.show_sql
    • hibernate.format_sql
    • hibernate.use_sql_comments : デバックに有効なコメント
    • hibernate.jdbc.fetch_size : 本質はStatement.setFetchSize()メソッド
    • hibernate.jdbc.batch_size : JDBC2のバッチ更新サイズ、5-30勧め?
    • hibernate.connection.autocommit : 自動コミット、勧めしない
    • hibernate.hbm2ddl.auto : SessionFactory生成時に永久化クラスを基に表を作りなおすか? 属性値 : validate, update, create, create-drop