Выберите объекты, проекция которых находится в списке, с помощью JPQL - PullRequest
0 голосов
/ 27 мая 2020

С помощью 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 способ реализации.

Можно ли найти объекты, где проекция содержится в списке? Как?

...