使用对象集合的Spring JPA存储库JPQL查询

时间:2019-04-27 04:14:59

标签: java spring-data-jpa jpql

假设我有下一个实体或对象:

class Person {    
  BigInteger cardNumber;
  String name;
  int age;
  Address address;
}

然后,我有一个List<Person>,并且我想根据cardNumbername找到最小的人。因此,我想编写一个与此类似的查询:

@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> namesList<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);

问题,我需要将namecardNumber用作单个值进行比较,因为它们都可以用作主键。我尝试CONCAT(name, cardNumber)并将带有name.concat(cardNumber.toString(())值的字符串列表传递给该方法,但是我发现JPQL将BigInteger转换成1.00这样的数字,所以,要使其正常工作,我需要执行类似name.concat(cardNumber.toString(() + ".00")的操作。这样,它可以工作,但是,我无法对从BigIntegerString的映射进行硬编码。

任何建议都值得赞赏。我只想找到一种传递对象集合的方法,而不是将这些字符串连接到我的代码中,然后将它们传递给查询方法。

谢谢。

0 个答案:

没有答案