С помощью JPQL я хочу выбрать объекты, у которых есть несколько значений свойств, содержащихся в предоставленном списке «кортежей».
Допустим, у меня была следующая сущность:
@Entity
data class Person(
val name: String,
val age: Int,
val weight: Int
) {
@Id
@GeneratedValue
val id: Long = 0
}
I хотите найти всех лиц, которые соответствуют свойствам, указанным в списке:
data class PersonProps(val name: String, val age: Int, val weight: Int)
val properties = listOf(PersonProps("John", 67, 85), PersonProps("Melinda", 36, 62))
Из следующей таблицы
id | name | age | weight
---+--------+-----+-------
1 |John | 67 | 85
2 |John | 26 | 85
3 |John | 54 | 85
4 |Melinda | 28 | 62
5 |Melinda | 36 | 62
... Я хочу найти столбцы:
1 |John | 67 | 85
5 |Melinda | 36 | 62
Если я запрашиваю с помощью select ... in :properties
, проблема в том, что объект не имеет представления (например, встраиваемого) объединенных свойств. Поэтому мне нужно создать проекцию с new PersonProps
в запросе, но я не нашел способа заставить его работать.
Реализацией JPA является Hibernate 5.4, для случая, когда есть спецификация Hibernate c способ реализации.
Можно ли найти объекты, где проекция содержится в списке? Как?