gpt4 book ai didi

inheritance - 如何在Grails/GORM中将域类模型对象从一个派生类更改为另一个

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

给定以下Grails GORM域类并使用逐级表继承:

class Book {
static belongsTo = [ parent: Parent ]
String title
}

abstract class Parent {
static hasMany = [ books: Book ]
}

class A extends Parent {
String asset
}

class B extends Parent {
String asset
}

假设我已从数据库中检索到A类的实例。我想将其转换为类B的实例。执行此操作的grails惯用方式是什么?

如果没有hasMany关系,我将删除A并创建一个新的B。但是,我不希望遍历大量的Books并更新其parent_id字段以指向新的B的开销。

在幕后,我基本上只想执行一个SQL UPDATE来将数据库字段parent.class从A更改为B。那么在GORM / Grails中执行此操作的推荐方法是什么?

最佳答案

在Grails或Hibernate中没有对此的支持,因为这类似于将A的实例更改为B内存中的对象,但是对象具有固定的类型并且不能更改。没有直接访问需要更改其值的鉴别符列的权限。

因此,执行此操作的方法是通过您所说的SQL更新。有几种选择,但最好的选择可能是groovy.sql.Sql,例如

import groovy.sql.Sql

class FooService {
def dataSource

void convertToB(A a) {
def sql = new Sql(dataSource)
sql.executeUpdate('update parent set class=? where id=?', [B.name, a.id])
}
}

关于inheritance - 如何在Grails/GORM中将域类模型对象从一个派生类更改为另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5725362/

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