我一直在寻找解决方案,但似乎找不到一个好的解决方案.
我有一个复杂的场景,我想评估hibernate乐观锁定与悲观锁定的行为
这样做的最佳位置是在一组良好的集成测试中,但我似乎无法找到一种简单的方法来启动并行事务.
>如何在Spring集成测试中创建2个并行事务,而无需手动创建Threads并注入SessionFactory对象.
最佳答案
添加此作为答案,因为评论上没有足够的空间:
在过去,我通过创建不同的EntityManager / Session并稍后注入它们来测试vanilla Spring.我不确定如何从Spring集成测试中做到这一点,但它可能会引发一个想法.
在下面的代码中,Account是一个版本化的小对象.如果可以使用自定义实体管理器实例化Spring Integration流(或任何调用的流),则可以实现相同的目标.
public void shouldThrowOptimisticLockException() {
EntityManager em1 = emf().createEntityManager();
EntityManager em2 = emf().createEntityManager();
EntityTransaction tx1 = em1.getTransaction();
tx1.begin();
Account account = new Account();
account.setName("Jack");
account.updateAudit("Tim");
em1.persist(account);
tx1.commit();
tx1.begin();
Account account1 = em1.find(Account.class,1L);
account1.setName("Peter");
EntityTransaction tx2 = em2.getTransaction();
tx2.begin();
Account account2 = em2.find(Account.class,1L);
account2.setName("Clark");
tx2.commit();
em2.close();
tx1.commit(); //exception is thrown here
em1.close();
}
原文地址:https://www.jb51.cc/spring/431985.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。