【问题标题】:How to configure hibernate to use Spring Data save and Session Factory with Criteria API in Spring Boot如何配置休眠以在 Spring Boot 中使用带有 Criteria API 的 Spring Data save 和 Session Factory
【发布时间】:2020-02-06 03:32:42
【问题描述】:

我想使用 Spring Data(保存方法,使用 @Transactional 和默认名称 - “transactionManager”)和我自己配置​​的会话工厂来使用它,例如,在 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 它工作正常,但是使用我的自动装配会话工厂的其他方法给了我一个异常:“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();
}

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 仍然不起作用,但我不确定我是否了解这些解决方案之间的区别
    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 2016-01-19
    • 2021-01-10
    • 1970-01-01
    • 2020-05-27
    • 2015-07-19
    • 2016-04-17
    • 1970-01-01
    相关资源
    最近更新 更多