我试图通过将其定义为我的某个存储库方法的返回类型来利用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能够正确检测它。
答案 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的各个方面,包括entityManagerInterface
,entityManagerFactoryInterface
,persistenceProviderClass
,和hibernate.dialect
这样可以减少错失的范围。
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
....
</bean>