Learning Hibernate step by step--03 HibernateUtilヘルプクラス


SessionFactoryは、データベースの永続化操作を処理し、単一スレッド環境で使用するSessionインスタンスを取得するために使用されています.SessionFactoryはスレッドが安全なグローバルオブジェクトであり、一度だけ初期化されるべきです.SessionFactoryを使いやすく、一度だけ作成するために、ヘルプクラスHibernateUtilを作成しました.JAvaはSessionFactoryの初期化を維持します.コードは次のとおりです.

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public final class HibernateUtil {

	private static final SessionFactory sessionFactory = buildSessionFactory();

	private HibernateUtil() {}
	
	private static SessionFactory buildSessionFactory() {
		try {
			//   hibernate.cfg.xml      SessionFactory
			return new Configuration().configure().buildSessionFactory();
		} catch (Throwable ex) {
			//                    
			System.err.println("  SessionFactory       ." + ex);
			throw new ExceptionInInitializerError(ex);
		}
	}

	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
}

また、プログラム開発では、トランザクションをできるだけ次の形式で使用し、Sessionが例外を投げ出した後、トランザクションはロールバックし、Sessionオブジェクトを破棄することで、例外が発生した後もSessionの内部状態がデータベースと一致することを保証します.

		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();
			// do something
			// ...
			tx.commit();
		} catch (Exception e) {
			if (tx != null) {
				tx.rollback();
			}
			throw e;
		} finally {
			session.close();
		}

また、ネット上には強力なHibernateUtilヘルプクラスがあり、以下のように自分のプロジェクトに参加することができます.
http://beckham-xiao.iteye.com/blog/355478
http://www.koders.com/java/fid07F9A88EDEDAEDAABC6C0535D5CC07C9BB39B43F.aspx