我正在尝试使用 Spring test 4.3.10 和 Hibernate 5.2.12 测试以下方法 但它总是在 transaction.commit(); 处抛出错误线。也就是说:
ARJUNA022006:ORB尚未初始化
public void insertSomethings(List<Thing> someThings)
{
StatelessSession statelessSession = getStatelessSession();
Transaction transaction = statelessSession.beginTransaction();
for (Thing thing: someThings) {
statelessSession.insert(someThings);
}
transaction.commit();
}
我检查了 hibernate 中 StatelessSessionImpl.java 的代码,发现了一个在 hibernate 4 中不存在的新行:
在 beforeTransactionCompletion() 中,它在以前的 Hibernate 版本中不执行任何操作。但是,从5.0开始,它被实现并调用flushBeforeTransactionCompletion()。在这个flushBeforeTransactionCompletion()方法中,我可以看到下面的代码总是被调用来做:
boolean flush = false;
try {
flush = (!isClosed()&& !isFlushModeNever()&&! JtaStatusHelper.isRollback(getJtaPlatform().getCurrentStatus());
}
因此,这导致我的单元测试失败,因为我们在此模式下没有 JTA。
有人遇到同样的问题吗?有什么解决办法吗?
谢谢
最佳答案
我找到了解决方案,将 NoJtaPlatfrom 添加为 jta 配置,而不是使用 jdbc:
hibernate.transaction_factory=jta
hibernate.transaction.jta.platform=org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform
关于java - Hibernate 5 中的 StatelessSessionImpl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49148913/