论坛首页 Java企业应用论坛

spring + hibernate 申明式事务不起作用

浏览 13836 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-04-19  
<property name="defaultAutoCommit" value="true" /> 
0 请登录后投票
   发表时间:2012-04-19  
啧啧。能读不能写是最常见的问题之一。事务没加上。
有很多种方法可以加事务的,看到楼上有解决方案我就不贴了
0 请登录后投票
   发表时间:2012-04-20  
spring事务是不会对只读事务中的更新数据的操作提交到数据库中的。
0 请登录后投票
   发表时间:2012-04-20  

@Transactional(readOnly = true) 
public class UserManager { 

改成
@Transactional(readOnly = false) 
public class UserManager { 

试试。

如果成功了,说明你是在一个
readOnly的方法中调用的你那个保存数据的方法,导致保存数据的readOnly=false失效,如果是的话,修改下调用顺序,保证保存数据的方法是事物的入口即可,即在它之前没有事物设置即可
0 请登录后投票
   发表时间:2012-04-20  

@Transactional(readOnly = true)
public class UserManager {

改成
@Transactional(readOnly = false)
public class UserManager { 

这就是正解,其他人都是瞎指挥。
看到Transactional(readOnly = true) 马上就知道问题了。
再加上<property name="defaultAutoCommit" value="false" />
说明spring开启了只读事务,而jdbc配置有是不自动提交的。

http://hi.baidu.com/jian20080808/blog/item/a40a7ec2bc56cc130ef4778b.html
0 请登录后投票
   发表时间:2012-04-20  
sohua2000 写道

@Transactional(readOnly = true)
public class UserManager {

改成
@Transactional(readOnly = false)
public class UserManager { 

这就是正解,其他人都是瞎指挥。
看到Transactional(readOnly = true) 马上就知道问题了。
再加上<property name="defaultAutoCommit" value="false" />
说明spring开启了只读事务,而jdbc配置有是不自动提交的。

http://hi.baidu.com/jian20080808/blog/item/a40a7ec2bc56cc130ef4778b.html


没有吧,你仔细看清楚,他的saveUser()方法上加了@Transactional(readOnly = false)的。
0 请登录后投票
   发表时间:2012-04-21  
<property name="defaultAutoCommit" value="true" />
0 请登录后投票
   发表时间:2012-08-17  
jinnianshilongnian 写道
xql80329 写道
xieyongwei 写道
在说HibernateDaoSupport 和 HibernateTemlate 的
请不要来躺混水 OK?

是在解决问题。

你到是给个解决方案。

解决方案 我之前已经给出来了 他昨天晚上解决了

解决方案是什么? 我也遇到了同样的问题。。
配置了申明式事务,show_sql为true
但是只能查询,增删改全都不成功。。连打印sql都没有 也不报错 。。求高手解惑
0 请登录后投票
   发表时间:2012-08-18  
hekuilove 写道
jinnianshilongnian 写道
xql80329 写道
xieyongwei 写道
在说HibernateDaoSupport 和 HibernateTemlate 的
请不要来躺混水 OK?

是在解决问题。

你到是给个解决方案。

解决方案 我之前已经给出来了 他昨天晚上解决了

解决方案是什么? 我也遇到了同样的问题。。
配置了申明式事务,show_sql为true
但是只能查询,增删改全都不成功。。连打印sql都没有 也不报错 。。求高手解惑

 

他的是配置文件的问题,如下是我的回复

我 写道
怀疑你springMVC 部分配置错了,请在SpringMVC的配置文件中 将@Service、@Repository排除。

可以参考 最新SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结 进行排除
 

可以参考 最新SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结  进行排除

 

我 写道
因为OpenSessionInViewFilter中Session的FlushModel默认是 MANUAL,,因此如果service层没有实施事务的话 是不会commit的。

当然也可以通过在web.xml中设置(只有在没有服务层事务时才设置)
<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>

这里说明你的服务层事务没有实施成功

AopUtils.isAopProxy(userManager) 看看 如果true表示AOP代理成功 否则失败,检查配置文件
 

 

kimimo 写道
jinnianshilongnian 写道
因为OpenSessionInViewFilter中Session的FlushModel默认是 MANUAL,,因此如果service层没有实施事务的话 是不会commit的。

当然也可以通过在web.xml中设置(只有在没有服务层事务时才设置)
<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>

这里说明你的服务层事务没有实施成功

AopUtils.isAopProxy(userManager) 看看 如果true表示AOP代理成功 否则失败,检查配置文件


谢谢你的帮助,通过你说的要把springmvc的package scan指定到controller所在的包,以及去掉apache shiro配置文件中的
Java代码
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"/>

<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager"/>
</bean>

这段配置事务就这正常了。
暂时还没搞清上面的那个配置为什么会导致事务配置不成功。

 

 

1、你是否配置了OpenSessionInView

2、是否是用的springMVC,而且在springMVC的配置文件中是否 只扫描 web层(通过你说的要把springmvc的package scan指定到controller所在的包

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics