@Transactional配置事务未提交到数据库

yjyq61 2014-04-02 04:08:11
小弟在研究事务,目前在学习@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就没反映,也没报错。。。。
...全文
1002 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenjie4892543 2014-04-08
  • 打赏
  • 举报
回复
解决问题的方法很重要、、、
wenjie4892543 2014-04-08
  • 打赏
  • 举报
回复
引用 3 楼 yjyq61 的回复:
[quote=引用 2 楼 wenjie4892543 的回复:] 还不行 加上 readonly = "false"
@Transactional(readOnly=false,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();
	}
还是不行,感觉没有走完的样子,
	System.out.println("进------------");
		service.saveNewUser(user);
		System.out.println("出----------------");
action 只能打印出进 出没打印出来,但没有报错[/quote] 你 try catch 抛出异常啊
byourfan 2014-04-02
  • 打赏
  • 举报
回复
引用 6 楼 yjyq61 的回复:
并且 我FOR循环插入多条数据的时候 第一条插进去了 以后的违反唯一约定没插进去,感觉 事务没起作用
你现在的事务边界是 saveNewUser 方法吧?是的话如果你是循环调用这个方法来插入数据,那每调用一次就是一次事务。所以说一般把事务开在service层
yjyq61 2014-04-02
  • 打赏
  • 举报
回复
并且 我FOR循环插入多条数据的时候 第一条插进去了 以后的违反唯一约定没插进去,感觉 事务没起作用
yjyq61 2014-04-02
  • 打赏
  • 举报
回复
引用 4 楼 dokia123 的回复:
你save的操作时,控制台有打印出插入语句吗?
我知道什么问题了,我表里有一条同样ID的数据,违犯主键唯一约定了,但为什么不抛个异常或是其他什么呢,控制台没任何输出,需要在什么地方配置么?
dokia123 2014-04-02
  • 打赏
  • 举报
回复
你save的操作时,控制台有打印出插入语句吗?
yjyq61 2014-04-02
  • 打赏
  • 举报
回复
引用 2 楼 wenjie4892543 的回复:
还不行 加上 readonly = "false"
@Transactional(readOnly=false,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();
	}
还是不行,感觉没有走完的样子,
	System.out.println("进------------");
		service.saveNewUser(user);
		System.out.println("出----------------");
action 只能打印出进 出没打印出来,但没有报错
wenjie4892543 2014-04-02
  • 打赏
  • 举报
回复
还不行 加上 readonly = "false"
wenjie4892543 2014-04-02
  • 打赏
  • 举报
回复
个人感觉 没什么问题啊 @Transactional public class WorkoutBusiness implements IWorkoutBusiness { 这个 类的 事务 去掉 试试 ,, 个人感觉全局的事务这样用没什么问题。,。

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧