在您的配置中,默认情况下使用容器管理的事务。在这种情况下,您需要定义一种事务同步方式,以便通知持久层(例如,可以更新第二级缓存)。因此,您需要
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(); }}


