【问题标题】:Hibernate QL (and in general, SQL) 1:n relation in clauseHibernate QL(通常是 SQL)子句中的 1:n 关系
【发布时间】:2019-01-30 22:39:04
【问题描述】:

我不知道如何称呼这个问题,这就是我不知道如何搜索现有答案的原因。

我有一个简单的 1:n 关系; Kotlin 代码:

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 台请求设备的房间都将全部归还,这不是我想要的。我希望归还的房间拥有所有给定的设备和/或更多设备,但它们不应该缺少任何设备。

这个问题有什么奇特的解决方案吗?我在 Spring Boot 2.0.2 上使用 Kotlin。并且对两者都很陌生。提前致谢!

【问题讨论】:

    标签: hibernate spring-mvc kotlin hql


    【解决方案1】:
    @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 变量命名

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 2016-05-30
      • 2012-06-25
      相关资源
      最近更新 更多