日期:2014-05-18  浏览次数:21245 次

@Transactional配置事务未提交到数据库
小弟在研究事务,目前在学习@Transactional来配置全局事务,但无法更新数据库,请大哥们指点一下

appliactioncontext.xml
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mappingResources">
<list>
<value>com/data/UserInfo.hbm.xml</value>
</list>
</property>
<!-- 方言 -->
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
</value>
</property>
</bean>
<!-- 事务管理器 -->
 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
  <tx:annotation-driven transaction-manager="transactionManager"/> 

DAO层
@Repository("workoutBusiness")
@Transactional
public class WorkoutBusiness implements IWorkoutBusiness {
@Resource(name="sessionFactory")
SessionFactory sessionFactory;
@Transactional(propagation=Propagation.REQUIRED)
public void saveNewUser(UserInfo user)  {
// Session session = sessionFactory.openSession();
Session session = sessionFactory.getCurrentSession();
// Transaction tran = session.beginTransaction();
// tran.begin();
session.save(user);
//tran.commit();
//session.close();
}

}

使用HIBERNATE的事务提交后能插进数据,但用spring @Transactionnal就没反映,也没报错。。。。
------解决方案--------------------
引用:
并且 我FOR循环插入多条数据的时候 第一条插进去了 以后的违反唯一约定没插进去,感觉 事务没起作用
你现在的事务边界是 saveNewUser 方法吧?是的话如果你是循环调用这个方法来插入数据,那每调用一次就是一次事务。所以说一般把事务开在service层
------解决方案--------------------
  解决问题的方法很重要、、、