如何配置休眠模式以在Spring Boot中通过Criteria API使用Spring Data Save和Session Factory

问题描述 投票:0回答:1

例如,我在Criteria API中使用Spring Data(保存方法,使用默认名称为@Transactional的@Transactional-“ transactionManager”)和我自己配置​​的Session Factory来使用它。因此,我配置了会话工厂,jpaVendorAdapter,数据源,PlatformTransactionManager bean。

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,它工作正常,但是使用我自动连线的Session Factory的其他方法给我一个例外:“ 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个回答
0
投票

如何使用JpaTransactionManager并使用EntityManager代替休眠Session,或者如果您确实需要Session unwrap it from the EntityManager

© www.soinside.com 2019 - 2024. All rights reserved.