spring+hibernate事务无法回滚

you_meng 2007-11-14 02:36:28
这是SaveDaoImpl下的方法
public boolean saveObject (Topic t, Content c) {
log.debug("saving Object instance");
try {
HibernateTemplate template = getHibernateTemplate();
template.save(t);
c.setTopicId(t.getId());
template.save(c);
log.debug("save successful");
return true;
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}
这是Service层下的方法
public boolean saveObject (Topic t, Content c) throws RuntimeException{
return dao.saveObject(t, c);
}
在template.save(c);中故意插入空值以抛出异常,但是在topic表中的数据还是插入了,事务没有回滚。困扰了我几天了很郁闷。
以下是我全部的配置文件,另外我的事务是在service层回滚的。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- 数据源 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url"
value="jdbc:mysql://localhost:3306/yqwbt?characterEncoding=utf-8">
</property>
<property name="username" value="root"></property>
<property name="password" value=""></property>
</bean>
<!-- 会话工厂 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource"><ref bean="dataSource" /></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.generate_statistics">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/yqw/bt/model/Topic.hbm.xml</value>
<value>com/yqw/bt/model/Content.hbm.xml</value>
</list>
</property>
<property name="eventListeners">
<map>
<entry key="merge">
<bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/>
</entry>
</map>
</property>
</bean>
<!-- 属性源 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="baseTxProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
lazy-init="true">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED, -DataAccessException</prop>
</props>
</property>
</bean>

<!-- 标题岛 -->
<bean id="topicDaoTarget"
class="com.yqw.bt.dao.impl.TopicDaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 内容岛 -->
<bean id="contentDaoTarget"
class="com.yqw.bt.dao.impl.ContentDaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 通用保存岛 -->

<bean id="saveDaoTarget" class="com.yqw.bt.dao.impl.SaveDaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 业务管理 -->
<bean id="topicService" parent="baseTxProxy">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref bean="topicServiceTarget" />
</property>
</bean>
<bean id="topicServiceTarget"
class="com.yqw.bt.service.impl.TopicServiceImpl">
</bean>
<bean id="contentService" parent="baseTxProxy">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref bean="contentServiceTarget" />
</property>
</bean>
<bean id="contentServiceTarget"
class="com.yqw.bt.service.impl.ContentServiceImpl">
</bean>
<bean id="saveService" parent="baseTxProxy">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref bean="saveServiceTarget" />
</property>
</bean>
<bean id="saveServiceTarget"
class="com.yqw.bt.service.impl.SaveServiceImpl">
</bean>
</beans>
...全文
391 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rickhunterchen 2007-12-26
  • 打赏
  • 举报
回复
事务没有回滚,应该是spring认为你自己捕获异常。
zhangdeyong 2007-12-21
  • 打赏
  • 举报
回复
<prop key="save*"> PROPAGATION_REQUIRED, -DataAccessException </prop>
设置成以下方式看下
<prop key="find*">
PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT,-RollbackableBizException
</prop>
wuqing5220 2007-12-12
  • 打赏
  • 举报
回复
我上面是试下 看看 代码有XML 格式没
没+-号 我汗个
wuqing5220 2007-12-12
  • 打赏
  • 举报
回复

try {
HibernateTemplate template = getHibernateTemplate();
template.save(t);
c.setTopicId(t.getId());
template.save(c);
log.debug("save successful");
return true;
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}


applebomb 2007-11-15
  • 打赏
  • 举报
回复
<prop key= "save* "> PROPAGATION_REQUIRED, -DataAccessException </prop>
把-DataAccessException去掉试试?
yeshucheng 2007-11-14
  • 打赏
  • 举报
回复
首先要批评下CSDN,没有把类似XML的东西给格式化!

叫任何人都难看,这个代码
you_meng 2007-11-14
  • 打赏
  • 举报
回复
顺便说一下那个 -DataAccessException我已经去掉了

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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