gpt4 book ai didi

hibernate - 删除HQL中的HasMany协会

转载 作者:行者123 更新时间:2023-12-02 15:25:40 25 4
gpt4 key购买 nike

我的类(class)有以下关联:

class A {
}

class B {

static hasMany = [
objects: A
]
}

我想使用HQL查询从所有B中删除关联。

这是我尝试过的:
B.executeUpdate("update B b set b.objects.id=NULL")

但是前者没有用。

如何删除HasMany Association fin HQL?

最佳答案

由于您要保留所有A和B实例,而只是分离它们,因此这样做的最终结果是将清空连接表。最有效的方法是使用SQL:

delete from b_a

我找不到通过HQL进行操作的任何方法,因为未映射联接表-它由Hibernate为您管理(就像在多对多中一样),但是您没有直接访问它的权限。通常,您将使用Groovy / Java代码中的实例,例如删除一个 B实例的 A,您可以这样做:
B b = ...
b.objects.clear()
b.save()

生成类似于
delete from b_a where b.id=?

但是,一次执行此操作显然效率很低,而且无论Grails还是Hibernate,我都看不到任何批量选择。因此,我只运行该SQL查询,而使用SQL的最简单方法是 groovy.sql.Sql:
import groovy.sql.Sql

class MyService {

def dataSource

void detachAllAsFromBs() {
Sql sql = new Sql(dataSource)
int rowCount = sql.executeUpdate('delete from b_a')
log.debug "removed $rowCount entries from b_a"
}
}

您可以忽略 sql.executeUpdate的返回值-删除的行数并不是特别有趣:
void detachAllAsFromBs() {
new Sql(dataSource).executeUpdate 'delete from b_a'
}

关于hibernate - 删除HQL中的HasMany协会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27969402/

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