在Spring Data JPA存储库方法中返回Stream时出现UnsupportedOperationException

时间:2015-09-25 14:43:16

标签: java spring hibernate spring-data spring-data-jpa

我试图通过将其定义为我的某个存储库方法的返回类型来利用Spring Data JPA 1.8 (Fowler)中引入的新Java 8 Stream支持。

interface CustomerRepository extends Repository<Customer, Long>
{
    Stream<Customer> findByLastname(String lastname);
}

当我运行我的应用程序时,在执行存储库方法时遇到以下异常:

java.lang.UnsupportedOperationException: Streaming results is not implement for this PersistenceProvider: GENERIC_JPA

我使用Hibernate作为我的JPA提供程序,但它看起来并不像Spring Data能够正确检测它。

1 个答案:

答案 0 :(得分:2)

我设法通过更改EntityManagerFactory的配置来解决问题,我已将 entityManagerInterface 属性指定为 org.hibernate.jpa.HibernateEntityManager 和Spring Data JPA现在能够检测到正确的PersistenceProvider。

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="entityManagerInterface" value="org.hibernate.jpa.HibernateEntityManager" />
    ...
</bean>

我可能遇到过这个问题,因为我已经将Spring Data JPA引入了已经配置了Hibernate / JPA的现有应用程序。我怀疑一个项目使用像Spring Boot这样的典型配置的项目不会遇到同样的问题。

修改 只需快速跟进,最好在可能的情况下指定jpaVendorAdapter,因为它会自动配置EntityManager的各个方面,包括entityManagerInterfaceentityManagerFactoryInterfacepersistenceProviderClass,和hibernate.dialect这样可以减少错失的范围。

<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
    </property>
    ....
</bean>