【发布时间】:2014-11-12 14:13:16
【问题描述】:
我正在尝试使用 Hibernate 和 Spring DataSourceTransactionManager 来处理提交和回滚功能,但可能我没有得到任何东西。
在使用 Spring DataSourceTransactionManager 之前,这是我的 DAO 类之一
package com.springgestioneerrori.DAO;
public class UtenteDAO extends DAOBase{
public void salvaUtente(Utente utenteIn) throws DAOException{
Session session = getHibernateSession(); //from this method I get Hibernate SessionFactory
try{
session.beginTransaction();
session.saveOrUpdate(Object);
session.getTransaction().commit();
}
catch(Exception e){
session.getTransaction().rollback()
}
}
}
这是给我 sessionFactory 的类
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new AnnotationConfiguration().configure().buildSessionFactory();
}
catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
getSessionFactory().close();
}
public Session getHibernateSession (){
Session session = HibernateUtil.getSessionFactory().openSession();
return session;
}
现在我正在尝试以声明方式使用 DataSourceTransactionManager。按照网上的一些例子,我写了这个:
<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="salvaUtente"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="userDaoTxPointcut" expression="execution(* com.springgestioneerrori.DAO.UtenteDAO.salvaUtente(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="userDaoTxPointcut" />
</aop:config>
现在,我应该在方法 salvaUtente() 中写什么来执行许多插入,例如像这些
session.saveOrUpdate(User);
session.saveOrUpdate(UserCredentials);
session.saveOrUpdate(UserOtherDetails);
并让 Spring 处理 commint 和回滚?
【问题讨论】:
-
单位工作是什么?所有插入都是一个工作单元,或者插入编号 3 应该发生,而与其他插入无关
-
所有插入都相互绑定,如果一个插入失败,其他插入必须无效。
标签: java spring hibernate spring-mvc spring-transactions