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接続
RDMSの方言
JNDI(Java Naming Directory Interface): 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