Запрос JPQL в репозиторий Spring JPA с использованием коллекции объектов - PullRequest
0 голосов
/ 27 апреля 2019

допустим, у меня есть следующая сущность или объект:

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.

Любой совет приветствуется. Я просто хочу найти способ передать коллекцию объекта, а не объединить эти строки в моем коде, а затем передать их методу запроса.

Спасибо.

...