java - Hibernate 5 中的 StatelessSessionImpl

标签 java hibernate

我正在尝试使用 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/

相关文章:

java - 如何修复 JSR-303 验证和 orientdb 的兼容性问题

java - hibernate 中的标准不区分大小写?

java - 在 Java 中定义新字符 (Android)

java - 测试该文件已移动到 "processed"路由 ftp ://host/incoming? move=processed in Camel

java - React Native 无法运行堆栈跟踪

java - 在java中实现分页的最佳方式

java - 如何在 java JDBC hibernate 中使用::date?

java - Spring Data JPA crudrepository save 方法有返回值吗?如果是的话它返回什么?

java - 在 ConcurrentHashMap 中,使用 scanAndLockForPut 而不是直接 lock() 方法来获取特定段上的锁有什么好处?

java - Hibernate映射思维错误