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

标签 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 似乎无法正确检测到它。

最佳答案

我设法通过更改 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的各个方面,包括entityManagerInterfaceentityManagerFactoryInterfacepersistenceProviderClasshibernate.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/

相关文章:

Java Spring : Cancelling a Future

java - 如何在预制字符串的每个字符之间添加任何字符?

java - 单元测试模拟服务实现

java - 用于 Spring MVC 3.0 的 JSON 客户端 API

java - Hibernate 与 HSQLDB 和 Oracle

postgresql - Postgres : update value of TEXT column (CLOB)

spring - 两个EntityManagerFactories,TransactionRequiredException:没有事务在进行中

java - Retrofit 2 无法上传图片

Java for循环,初始化变量满足终止要求但循环没有终止

java - 如何在 Spring Data Rest 中添加自定义状态代码