java - 如何在 Spring Boot 中配置 hibernate 以通过 Criteria API 使用 Spring Data save 和 Session Factory

标签 java spring-boot transactions spring-data-jpa sessionfactory

我想使用 Spring Data(保存方法,使用 @Transactional 和默认名称 - “transactionManager”)和我自己配置​​的 session 工厂来使用它,例如在 Criteria API 中。所以我配置了 Session Factory、jpaVendorAdapter、DataSource、PlatformTransactionManager beans。

PlatformTransactionManager 看起来像:

    @Bean(name = "transactionManager")
    public PlatformTransactionManager hibernateTransactionManager() {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
//        JpaTransactionManager transactionManager = new JpaTransactionManager();

        transactionManager.setSessionFactory(sessionFactory().getObject());
//        transactionManager.setDataSource(this.dataSource());

        return transactionManager;
    }

因此,此配置不允许 Spring Data 保存方法正常工作。当我执行它时,它不会引发任何异常,但它也不插入数据,只更新表结构。另一方面,如果我使用

JpaTransactionManager transactionManager = new JpaTransactionManager();

而不是 HibernateTransactionManager 它工作得很好,但是使用我的 Autowiring session 工厂的其他方法给了我一个异常(exception):“javax.persistence.TransactionRequiredException:没有事务正在进行中”

例如:

@Transactional
public List find() {
    return this.getCSession().createNativeQuery("SELECT CAST(animals.rabbit.id as VARCHAR) AS id, name FROM animals.rabbit").getResultList();
}

所以,我对使用这两种方法很感兴趣。我该如何修复它?!

最佳答案

如何使用 JpaTransactionManager 并使用 EntityManager 而不是 Hibernate Session 或者如果您确实需要 Session unwrap it from the EntityManager

关于java - 如何在 Spring Boot 中配置 hibernate 以通过 Criteria API 使用 Spring Data save 和 Session Factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58293246/

相关文章:

java - 线程实际上是如何工作的?

Java 相当于 .net 回收

java - 继承和对象创建,理论上和实际

java - 对事务性服务的理解——spring

java - Liquibase:如何在列标签中设置外键约束?

java - Spring MVC 中无法返回 HTML View

java - 如何在 Spring Boot 2 中检索应用程序上下文

java - Spring JPA Repository保存不插入数据库

java - 将两个 SOAP 服务合二为一的首选设计 "transaction"

java - 在事务上下文中使用 findBy