Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将hibernate配置为在Spring Boot中使用Spring数据保存和会话工厂以及Criteria API_Java_Spring Boot_Transactions_Spring Data Jpa_Sessionfactory - Fatal编程技术网

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

Java 如何将hibernate配置为在Spring Boot中使用Spring数据保存和会话工厂以及Criteria API,java,spring-boot,transactions,spring-data-jpa,sessionfactory,Java,Spring Boot,Transactions,Spring Data Jpa,Sessionfactory,我想使用Spring数据(save方法,使用@Transactional,默认名称为“transactionManager”)和我自己配置的会话工厂来使用它,例如在CriteriaAPI中。所以我配置了会话工厂、jpaVendorAdapter、数据源、PlatformTransactionManager bean PlatformTransactionManager看起来像: @Bean(name = "transactionManager") public PlatformT

我想使用Spring数据(save方法,使用@Transactional,默认名称为“transactionManager”)和我自己配置的会话工厂来使用它,例如在CriteriaAPI中。所以我配置了会话工厂、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();
}

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

如何使用
JpaTransactionManager
并使用
EntityManager
而不是Hibernate
会话
,或者如果您确实需要
会话

仍然不起作用,但我不确定我是否理解这些解决方案之间的区别