2 u010407061 u010407061 于 2015.06.01 17:17 提问

ssh 事物配置异常 悬赏20C币

我的问题是这样的:我在两个service中分别调用两个代码几乎相同的dao中方法查询数据库,现在是一个dao正常,另一个在getCurSession(MYSQL).createQuery(sql)句抛出异常,异常:
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
我按照百度的方法,在配置文件中加了这两句话后,
图片说明

报错改了:createsqlquery is not valid without active transaction

我的配置文件是:
图片说明
dao:
图片说明
service:
图片说明

图片说明两个都没有用@trancational注解

忘各位帮忙看看,谢谢了

7个回答

linysheart
linysheart   2015.06.01 17:42
已采纳

图片说明
写一个不以这些开头的service方法,比如testService()。看看是不是也是不行。。如果也不行话。就是事物配置的问题。。

linysheart
linysheart 回复u010407061: 就是我上一条跟你说的配置一个 * 星号方法。。你多试试,或者查一下资料。。
大约 3 年之前 回复
linysheart
linysheart 回复u010407061: 就是我上一条跟你说的配置一个 * 星号方法。。你多试试,或者查一下资料。。
大约 3 年之前 回复
u010407061
u010407061 回复林延松: 你好厉害,就是这个问题,如果是有配置的方法名开头的就没问题了,这个如果是没有配置名的怎么办呢?
大约 3 年之前 回复
linysheart
linysheart 回复u010407061: 看看是不是get,update,save,delete....这些有配置的方法名开头的,没问题,然后没有配置的有问题?
大约 3 年之前 回复
u010407061
u010407061 哦,还是错,事物配置不知道怎么改了,因为一个能行,一个不能行,虽然有两个数据库,但出错的都是操作同一个数据库,奇葩了
大约 3 年之前 回复
devmiao
devmiao   Ds   Rxr 2015.06.01 17:25
u010407061
u010407061 这个链接我按照文章最后的办法改了,还是会报一个错non-trans...
大约 3 年之前 回复
qq_20353583
qq_20353583   2015.06.01 17:23
<bean id="transactionManager"  
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
    <property name="sessionFactory" ref="sessionFactory" />  
</bean>      
<!-- 配置服务层 -->  
<bean id="userDaoAgency" class="com.dao.impl.UserDaoImpl">  
    <property name="sessionFactory" ref="sessionFactory" />  
</bean>      
<bean id="userDao"    
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">    
    <!-- 配置事务管理器 -->    
    <property name="transactionManager" ref="transactionManager" />       
    <property name="target" ref="userDaoAgency" />    
    <property name="proxyInterfaces" value="com.dao.UserDao" />  
    <!-- 配置事务属性 -->    
    <property name="transactionAttributes">    
        <props>    
            <prop key="*">PROPAGATION_REQUIRED</prop>  
        </props>    
    </property>    
</bean>  
u010407061
u010407061 这个是要对每一个bean都这么配置么?有了注解不是就不用这么麻烦了么?
大约 3 年之前 回复
u010906788
u010906788   2015.06.01 17:26

事务方面应该使用Spring来控制吧。
而且你这个是分布式事务么?两个Dao是使用不同数据库么?

u010407061
u010407061 回复广州IT民工:<tx:annotation-driven transaction-manager="transactionManager" /> 的配置是等价于 <tx:advice id="txAdvice" transaction-manager="txManager">这个么?我直接替换的,启动报错,是不是还需求配置啥?位置有要求么
大约 3 年之前 回复
u010407061
u010407061 回复广州IT民工:<tx:annotation-driven transaction-manager="transactionManager" /> 的配置是等价于 <tx:advice id="txAdvice" transaction-manager="txManager">这个么?我直接替换的,启动报错,是不是还需求配置啥?位置有要求么
大约 3 年之前 回复
u010906788
u010906788 回复u010407061: 试试使用注解配置事务 <tx:annotation-driven transaction-manager="transactionManager" /> service层的方法加入@Transactional。再不行可以试试,把Get的事务都设置成requier。
大约 3 年之前 回复
u010906788
u010906788 service层加入@Transactional。再不行可以试试,把事务都设置成requier。
大约 3 年之前 回复
u010906788
u010906788 <tx:annotation-driven transaction-manager="transactionManager" />
大约 3 年之前 回复
u010906788
u010906788 试试使用注解配置事务
大约 3 年之前 回复
u010407061
u010407061 对,我是两个数据库,我就简单的把配置的东西都重复的写了一下,执行起来是没问题的,现在出错的这个是操作同一个数据库的
大约 3 年之前 回复
linysheart
linysheart   2015.06.01 17:33

图片说明

图中这两个地方添加: 试试

u010407061
u010407061 还是这个错误org.hibernate.HibernateException: createQuery is not valid without active transaction
大约 3 年之前 回复
linysheart
linysheart 回复u010407061: 重新评论了。代码片段没出来。。。
大约 3 年之前 回复
u010407061
u010407061 加啥?冒号?
大约 3 年之前 回复
linysheart
linysheart   2015.06.01 17:34

图片说明

这两个地方加:

 <tx:method name="*" rollback-for="Throwable" propagation="REQUIRED"/>

试试。。刚才怎么代码片段没出来。。

linysheart
linysheart 在你的service层
大约 3 年之前 回复
sumcul
sumcul   2015.06.09 12:20

我看到你是两个数据源,查看具体的出问题的数据源的配置、bean和dao的配置。应该是配置出错了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!