[英]Multi step transaction in hibernate
在休眠状态下,多步转换面临的问题很少。 这就是我在做什么。
我的DAO方法之一
代码看起来像这样:
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public Object myDAOMethos(...){
....
getHibernateTemplate().execute(
new HibernateCallback<Long>() {
public Long doInHibernate(Session session)
throws HibernateException, SQLException {
// Create a new record in table A
session.save(objA);
final long pKey = objA.getId();
// Update the row in table B
org.hibernate.Query query = session
.getNamedQuery("updateBQuery").setLong("idB",pKey...
query.executeUpdate();
}
}
return true;
}
});
}
该方法受约束。
我的问题:当我在tomcat上运行此代码时,一切正常。 但是,当我尝试为此执行一个junit测试用例时,表B上的更新就永远不会发生。 虽然我可以在控制台输出上看到更新SQL(hibernate.show_sql = true)。 也不例外! 只是插入发生而已。
不知道这里发生了什么! 有任何想法吗!?
问候,-J
有些事情可能是错误的
您手动将第一个实体的外键更新为可疑; 如果您正确设置了人际关系,hibernate应该为您执行此操作。
您的考试班如何设置? 您是否在某个时候回滚数据以便测试透明? 我要说的是,如果您看到sql,但是在测试中却看不到数据,则试图在错误的时间访问数据以进行测试-要么数据尚未提交,或数据已经回滚(如果要回滚)。 您可能想尝试的一件事是关闭TX,然后运行测试。 请注意,您将必须手动清理数据,但它应指出测试中的tx配置是否是问题所在。
Spring提供了一些基础测试类,可以管理事务并为您回滚数据。
谢谢回复。 你是对的。
当您将发布此答案时,我意识到问题出在哪里并尝试了,行之有效!!
这是您帖子中的第二点。 基本上,junit测试用例本身使用“ AbstractTransactionalJUnit4SpringContextTests”,并通过@Rollback管理测试后的数据库提交/回滚。 因此,基本上,我尝试更新的数据并不是一开始就创建的。 仍然感到惊讶的是,我没有在控制台上看到任何错误!
我接受您的答案是正确的答案。 万分感谢!
-J
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.