我正在尝试利用 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 似乎无法正确检测到它。
最佳答案
我设法通过更改 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>
关于java - 在 Spring Data JPA 存储库方法中返回 Stream 时出现 UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32784749/