ご使用の構成では、コンテナー管理トランザクションがデフォルトで使用されているようです。この場合、永続層に通知されるようにトランザクション同期の方法を定義する必要があります(たとえば、第2レベルのキャッシュを更新できます)。したがって、を定義する必要があります。 manager_lookup_class
次のようなプロパティ:
// For GlassFish:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.SunONETransactionManagerLookup
// For WebSpere:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.WebSphereExtendedJTATransactionLookup
// For JBoss:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
// For OpenEJB:
hibernate.transaction.manager_lookup_class=org.apache.openejb.hibernate.TransactionManagerLookup
また、データレイヤーにアクセスするビジネスメソッドを「トランザクション」としてマークする必要があります。そのためには、@javax.ejb.TransactionAttribute(REQUIRED)
でマークする必要があります (こちら
を参照してください。 この注釈の詳細については)
Bean管理のトランザクションに切り替えるオプションもあります。あなたは言うことによってそれをすることができます:
hibernate.transaction.factory_class=org.hibernate.transaction.JTATransactionFactory
次に、Beanはトランザクションの開始/終了を担当します。
org.hibernate.Session session = ...;
org.hibernate.Transaction tx = null;
try {
tx = session.beginTransaction();
session.createQuery(...); // do some staff
tx.commit();
} catch (HibernateException e)
{
if (tx != null) {
tx.rollback();
}
}