假设我有下一个实体或对象:
class Person {
BigInteger cardNumber;
String name;
int age;
Address address;
}
然后,我有一个List<Person>
,并且我想根据cardNumber
和name
找到最小的人。因此,我想编写一个与此类似的查询:
@Query("SELECT p FROM Person p WHERE p.cardNumber = :myPerson.cardNumber AND p.name LIKE :myPerson.name ORDER BY p.age ASC")
public List<Person> find(@param("myPerson") List<Person> personList);
我的问题是我不确定如何解决这个问题以及使用哪种方法。我尝试传递两个集合List<String> names
和List<BigInteger> cardNumbers
,查询是这样的:
@Query("SELECT p FROM Person p WHERE p.cardNumber IN (:cardNumbers) AND p.name IN (:names) ORDER BY p.age ASC")
public List<Person> find(@param("cardNumbers") List<BigInteger> cardNumbers, @param("names") List<String> names);
问题,我需要将name
和cardNumber
用作单个值进行比较,因为它们都可以用作主键。我尝试CONCAT(name, cardNumber)
并将带有name.concat(cardNumber.toString(())
值的字符串列表传递给该方法,但是我发现JPQL将BigInteger
转换成1.00
这样的数字,所以,要使其正常工作,我需要执行类似name.concat(cardNumber.toString(() + ".00")
的操作。这样,它可以工作,但是,我无法对从BigInteger
到String
的映射进行硬编码。
任何建议都值得赞赏。我只想找到一种传递对象集合的方法,而不是将这些字符串连接到我的代码中,然后将它们传递给查询方法。
谢谢。