【问题标题】:Can @Query annotation in Spring Data JPA take in a list of enums?Spring Data JPA 中的@Query 注释可以接收枚举列表吗?
【发布时间】:2018-01-19 06:06:23
【问题描述】:

我一直在试图弄清楚如何为我的 sql 查询输入枚举列表。这是它的样子:

@Query(value = "Select * from employees where city in :cities", nativeQuery = true)
List<Employee> findByCities(@Param("cities") List<City> cities);

我知道对于简单的查询,我们可以依赖 JPA Criteria API,但我想知道我是否真的可以这样做。因为如果是这样,如果我可以灵活地指定列表,我可以创建更复杂的查询(例如与另一个表连接)。

【问题讨论】:

  • @Query 不在“JPA”中。它位于“Spring Data JPA”(!= JPA API)中。除了你使用 SQL 之外别无其他,所以问题应该直接针对 JDBC

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


【解决方案1】:

是的 spring-data-jpa 的@Query 可以获取enums 的列表。

这是我的存储库方法

@Query("Select u from User u where u.userType in :types")
List<User> findByType(@Param("types") List<UserType> types);

这是我的存储库调用

userRepository.findByType(Arrays.asList(AppConstant.UserType.PRINCIPLE)))

这是查询日志

SELECT user0_.id           AS id1_12_, 
       user0_.date_created AS date_created2_12_, 
       ...
       ...
FROM   users user0_ 
WHERE  user0_.user_type IN ( ? ) 

希望这会有所帮助。

PS:我在本地机器上对此进行了测试,结果是肯定的。


更新 1

同样不适用于nativeQuery=true。我在本地系统上对其进行了测试,它似乎不适用于本机查询。但是,对于 JPQL,它可以正常工作,如上述答案中所述。

可能是this 答案会有所帮助。

【讨论】:

    猜你喜欢
    • 2018-08-13
    • 2013-06-19
    • 1970-01-01
    • 2020-11-28
    • 2016-04-23
    • 2018-10-01
    • 2020-07-30
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多