ベストプラクティスとして、セッションファクトリを使用することをお勧めします。 Netbeansが生成するものがここにあります。
public class HibernateUtil {
private static final SessionFactory sessionFactory;
private static final Configuration configuration = new Configuration().configure();
static {
try {
// Create the SessionFactory from standard (hibernate.cfg.xml)
// config file.
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Log the exception.
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
は、あなたがこれをしたら、トランザクションのトランザクションをオープンすると、セッションを開くこと
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
//Do something
session.getTransaction().commit();
注このコードを使用することができます。私は純粋なHibernate(JPAとは違って)で何かをするためにトランザクションが必要だと思っています。
あなたはより洗練されたソリューションについては、この
HibernateUtil.getSessionFactory().close();
を行うことを確認したいプログラムの終了時に、あなたは春またはEJBを自動セッション/トランザクション管理に見てみたいことがあります。一度正しく構成されたシーンの背後にあるセッションを処理します。
EDIT:
はちょうどあなたの疑問とIDについてあなたのポイントを再読み込み。私はあなたが複数のスレッドのアプリケーションをやっていない限り、sessionfactoryのアプローチはあなたの目的のために動作すると信じています。これは、デフォルトでは、HibernateセッションとそのセッションにリンクされたORMオブジェクトが1つのスレッドにのみ関連付けられているためです。私がこれについて間違っているかどうか教えてください。
JPAまたは汎用のHibernateを使用していますか?この問題を解決するために何をしましたか? –