Hibernate QL (и вообще SQL) 1: n отношение в предложении - PullRequest
0 голосов
/ 24 августа 2018

Я не знаю, как назвать эту проблему, поэтому я не знал, как искать существующие ответы.

У меня простые отношения 1: n;Код Котлина:

class Room {
    val equipments : List<Equipment>
    [...]
}

class Equipment {
    val EquipmentId : Long
    [...]
}

У меня также есть запрос гибернации для поиска комнат с оборудованием:

@Query("SELECT DISTINCT r FROM Room r JOIN r.Equipment e WHERE r.Seats >= :Seats AND e.EquipmentId IN :Equipments ")
fun findRoomsBySeatsAndEquipment(@Param("Seats") Seats: Int, @Param("Equipments") Equipments: List<Long>): List<Room>

Таким образом, все комнаты, которые имеют как минимум 1 запрошенное оборудование,все возвращено, а это не то, что я хочу.Я хочу, чтобы в комнатах, которые были возвращены, было все указанное оборудование и / или больше, но в них не должно быть пропущенного.

Есть ли причудливое решение этой проблемы?Я использую Kotlin на Spring Boot 2.0.2.и я довольно новичок в обоих.Заранее спасибо!

1 Ответ

0 голосов
/ 19 сентября 2018
@Query("SELECT DISTINCT r
FROM Room r
WHERE r.id not in(
    SELECT e.room.id FROM Equipments e
    WHERE r.seats >= :seats AND e.id IN :equipments")
fun findRoomsBySeatsAndEquipment(@Param("seats") seats: Int, @Param("equipments") equipments: List<Long>): List<Room>

По моему ограниченному опыту в sql, join - плохой выбор для поиска чего-то недостающего. Я иду с вложенным поиском "где не в".

Я позволил себе исправить случай, когда ваши переменные соответствовали именам переменных kotlin & java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...