有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何配置hibernate在Spring Boot中使用Spring数据保存和会话工厂以及Criteria API

我想使用Spring数据(save方法,使用@Transactional和默认名称——“transactionManager”)以及我自己配置的会话工厂来使用它,例如在Criteria API中。所以我配置了会话工厂、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数据保存方法正常工作。当我执行它时,它不会抛出任何异常,但它也不会插入数据,只会更新表结构。如果我用另一只手

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();
}

所以,我很有兴趣使用这两种方法。我怎么能修好它


共 (1) 个答案

  1. # 1 楼答案

    使用JpaTransactionManager或者使用EntityManager而不是Hibernate Session或者如果你真的需要一个Session{a1}怎么样