java更新失败_java – Spring Transaction – 当一个db更新失败时,自动回滚以前的db更新...

我正在编写一个简单的应用程序(

Spring Hibernate PostgreSql db).我只是想构建一个示例对象并在db中持久化.

我运行一个简单的java类main方法,我已经加载了applicationContext并且引用了服务类,如下所示

TestService srv = (TestService)factory.getBean("testService");

应用上下文 – 上下文:

class="org.springframework.orm.hibernate3.HibernateTransactionManager">

在TestService中我注入了TestDao.在测试服务方法中,我构建了员工对象

emp1和emp2并且两次调用dao来更新.

TestDaoImpl代码:

public void saveOrUpdate(BaseDomainModel baseObject) {

Session session = null;

try {

session = getHibernateTemplate().getSessionFactory().openSession();

session.saveOrUpdate(baseObject);

session.flush();

} catch (Exception e) {

logger.error("Generic DAO:saveOrUpdate::" + e);

e.printStackTrace();

} finally {

if (session != null) {

session.close();

}

}

}

当emp2更新失败时,emp1也应该失败.我怎么做.请指教

提前致谢

更新 :

谢谢南大.我试过Declarative交易.但它没有用. emp1被持久化并且没有回滚eveb第二次dao调用失败.我已经为该方法添加了事务建议.

为了测试是否应用了交易建议我将传播更改为“NOT_SUPPORTED”.但是emp1仍然存在.期望是我们应该有Transaction Not Supported类型的异常.请指教 .

更新

@seanizer – 感谢您的更新.我甚至尝试过添加

@Transactional(传播= Propagation.NOT_SUPPORTED)

public void saveEmp(Employee emp)

到那个服务方法.但它没有用.此外,只有当我需要调用一个dao时,迭代集合才能保持良好状态.如果我必须调用两个不同的dao来持久化obj1和obj2-这可能没有帮助.只是为了检查交易是否得到应用我得到了

@Transactional(传播= Propagation.NOT_SUPPORTED).

但仍然obj1持续存在.

我只是怀疑给出的xml配置/注释是否正确.请检查

class="org.springframework.orm.hibernate3.HibernateTransactionManager">

我正在使用org.springframework.orm.hibernate3.HibernateTransactionManager作为transactionManager.它是否正确 ?

更新

我创建了从RuntimeException扩展的异常类myRuntimeExp,并将其从Dao方法抛出到service方法.但仍然没有发生回滚.我只是怀疑我是否在applnContext.xml中正确地给出了配置.有人可以帮助我检查是否将交易建议/注释应用于该方法?有没有办法在调试模式下运行它并检查

问题 :

我在用

session = getHibernateTemplate().getSessionFactory().openSession();

但它应该是当前会议,它工作正常.

session = getHibernateTemplate().getSessionFactory().getCurrentSession();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值