Hibernate4+springmvc4 aop配置事务不回滚。100%结贴,在线等,急急急急....

@  2014-11-19 10:50:32
我配置了一个AOP管理事务,现在测试一下aop配置的事务是不是有效,数据设置了一个字段唯一,现在service插入是报错的,现在第一条可以插入,第二条因为唯一就会报错,但是数据库里还是有一条数据存在的,照理说回滚的话一条数据都没有,mysql数据库,InnoDB引擎!有人告诉我说,配置readOnly=true是可以写的!求证实,比较急,求大神指教........在线等
Spring配置文件
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /><!-- spring管理事务 -->
<!-- 创建事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- 配置事务异常封装 -->
<bean id="persistenceExceptionTranslationPostProcessor"
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED"/>
<tx:method name="exit*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="remove*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config expose-proxy="true">
<aop:pointcut expression="execution(public * com.qianlima.service..*.*(..))" id="transactionAopConfig"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionAopConfig" />
</aop:config>

Service:
public int addNewMembers(Members m) {
try{
membersDAO.saveNewMembers(m);

membersDAO.saveNewMembers(m);
return 1;
}catch (Exception e) {
e.printStackTrace();
return 0;//插入失败时,返回0,告知用户注册失败...
}
}
DAO:
public int saveNewMembers(Members m) {
try{
getHibernateTemplate().getSessionFactory().openSession().save(m);
return 1;
}catch (Exception e) {
e.printStackTrace();
return 0;
}
}
...全文
370 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
s1175408521 2014-12-04
  • 打赏
  • 举报
回复
我之前也是遇见这个问题,后来发现是我的另个save方法没有放在SERVICE里,必须放到同一个service 里然后service 加上@transaction 才会回滚。我觉得你也是这个问题
@&nbsp; 2014-12-04
  • 打赏
  • 举报
回复
首先感谢各位大神,回我的帖子,之前发了过了几天没回复,就没有继续关注了,这个问题至今还是存在的,只不过我现在没有时间来处理这个问题了!首先我确定我的aop配置的包是对的,就是用的hibernate4 和spring4不知道有没有什么新特性!
  • 打赏
  • 举报
回复
execution(public * com.qianlima.service..*.*(..)), try{ membersDAO.saveNewMembers(m); return 1; }catch (Exception e) { e.printStackTrace(); return 0;//插入失败时,返回0,告知用户注册失败... } try{ membersDAO.saveNewMembers(m); return 1; }catch (Exception e) { e.printStackTrace(); return 0;//插入失败时,返回0,告知用户注册失败... } 试试这样子看看。前提是你的数据库主键ID自增长
April_CH 2014-11-20
  • 打赏
  • 举报
回复
首先openSession().save(m);貌似不支持事务,其次service和dao的异常需要向上抛出,自己处理了异常事务就就不会回滚
suciver 2014-11-20
  • 打赏
  • 举报
回复
dao和service里的try catch去掉,spring的事务管理是由org.springframework.transaction.interceptor.TransactionAspectSupport通过代理来做的,只要有异常抛出就会回滚的,你自己try catch了事务拦截器根本就接收不到异常怎么回滚。
lapland_cool 2014-11-19
  • 打赏
  • 举报
回复
试试嘛,spring里手动捕获异常事务是不会回滚的
@&nbsp; 2014-11-19
  • 打赏
  • 举报
回复
跟捕获异常没有关系吧,事务是会自动识别的!
lapland_cool 2014-11-19
  • 打赏
  • 举报
回复
DAO里的try catch语句去掉试试
@&nbsp; 2014-11-19
  • 打赏
  • 举报
回复
来人啊,自顶,着急啊。。。。。。。。。。。。。
@&nbsp; 2014-11-19
  • 打赏
  • 举报
回复
自顶一下,求大神火速支援.....
浪里花 2014-11-19
  • 打赏
  • 举报
回复
getHibernateTemplate().getSessionFactory().openSession().save(m); 这句,hibernate4是getHibernateTemplate().getSessionFactory().getCurrentSession().save(m) 另外你service层包名贴出来看看,我怀疑你aop没有切入进去
ly_bab 2014-11-19
  • 打赏
  • 举报
回复
getHibernateTemplate().getSessionFactory().openSession().save(m); 应该是这行代码的原因,可能对应不同的hibernate session : 建议换成getHibernateTemplate().save(m)试试 应该可以 我是这样写的
@&nbsp; 2014-11-19
  • 打赏
  • 举报
回复
试了下,还是没用,看配置文件什么的,都很正常!不是到是不是hibernate4的原因
tony4geek 2014-11-19
  • 打赏
  • 举报
回复
try catch 去掉。
zcwgogo 2014-11-19
  • 打赏
  • 举报
回复
try 去掉就可以了 ,事务是否回滚是看在service的方法执行后由Spring 来看你有没有丢异常的,如果有异常就回滚,你把异常捕捉了 spring 认为你是成功了,如果要让action知道是否成功 或者什么原因导致不成功可以自定义异常 然后加上参数丢出来

67,513

社区成员

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

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