JPA选择多个字段

问题描述 投票:0回答:2

是否有可能在jpql中实现类似于下面的mySQL?

select * from PERSON p where (p.name, p.country)
IN (('Bryan', 'Netherlands'), ('Candice', 'New Zealand'), ...);

其中“ ...”是列表的延续。我曾想创建一个新实体列表作为值的占位符,但是我不确定如何使它工作。我正在考虑以下方面的内容:

    @Query(
        value = "select p from Person p where (p.name, p.country) in :personList")
    List<Person> findPersonsIn(@Param("personList") List<Person> personList);

我知道这是完全不正确的,但是我希望有人可以阐明如何在JPA或JDBC中实现上述MySQL语句。

java mysql spring jpa jdbc
2个回答
0
投票

是。使用AND运算符:

select * from PERSON p where ( p.name IN ('Bryan', 'Netherlands') ) AND ( p.country
IN ('Candice', 'New Zealand') ), ...);

0
投票

JPA中未提供IN子句中的多个列

@Query(
            value = "select p from Person p where (p.name, p.country) in :personList")
        List<Person> findPersonsIn(@Param("personList") List<Person> personList);

您可以尝试以下代码吗?

 @Query(
        value = "select p from Person p where p.name in (:personName) or p.country in (:personCountry) ")
    List<Person> findPersonsIn(@Param("personName") List<String> personName,@Param("personCountry") List<String> personCountry);

或者您可以使用“ querydsl”更轻松地编写查询]

© www.soinside.com 2019 - 2024. All rights reserved.