допустим, у меня есть следующая сущность или объект:
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
.
Любой совет приветствуется. Я просто хочу найти способ передать коллекцию объекта, а не объединить эти строки в моем коде, а затем передать их методу запроса.
Спасибо.