gpt4 book ai didi

hibernate - 如何在不使用inList闭包的情况下使用GORM获取表B中不存在的表A行?

转载 作者:行者123 更新时间:2023-12-02 14:06:02 26 4
gpt4 key购买 nike

我有一个域定义,它将为数据库表生成以下示例:

Table example

我要执行以下查询:获取表B中不存在的所有与表A相关的域对象

我正在使用inList闭包,如下所示:

    List<DMiembro> m = DMiembro.list()

List<DUsuario> usuarios = DUsuario.createCriteria().list(params) {
if (m) {
not {
m*.usuario.id.collate(1000).each { def lista ->
or {
inList("id", lista)
}
}
}
}
eq("enabled", true)
order("nombre", "asc")
} as List<DUsuario>

这很好。但是, DMiembro中的数据正在增长。现在,我得到一个与查询大小有关的数据库错误。这是合乎逻辑的,因为查询的参数数量太大

因此,还有另一种方法来构建查询以收集 Dusuario中不存在的 DMiembro对象吗?

最佳答案

解决方案1:
您可以在条件中使用GORM DetachedCriteria

import grails.gorm.DetachedCriteria
List<DUsuario> usuarios = DUsuario.createCriteria().list(params) {
not {
'in'('id', new DetachedCriteria(DMiembro).build {
projections {
property 'id'
}
})
}
eq("enabled", true)
order("nombre", "asc")
} as List<DUsuario>

如您所见,这将是一个NOT IN SQL请求,对于性能而言,这不是一个好主意。但是,无论批量如何(请求的执行时间除外),该请求都是“可理解的”并且仍然是一个很好的解决方案。

解决方案2:
避免在DMiembro表上使用 LEFT JOINRIGHT JOINNULL检查NOT NOT运算符。请参阅 here以左连接作为纯SQL的解决方案。

关于hibernate - 如何在不使用inList闭包的情况下使用GORM获取表B中不存在的表A行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47679237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com