gpt4 book ai didi

groovy - GORM - 更新对象而不先检索它

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

我希望能够更新以前保留的对象(我有一个 ID),而不必先检索它。我试图避免的主要事情是,当从数据库检索该对象时,必须将多个值复制到对象的字段中。我在映射中包含这些值,其中键对应于字段名称,因此通过构造函数以映射作为参数创建对象很简单。不幸的是,以这种方式创建的对象在保存时会产生新的数据库记录,即使 id 字段设置为现有记录的字段也是如此。

我目前使用的示例之一略有不同 here用于复制 Groovy 类属性,但由于多种原因,它不是一个非常优雅的解决方案。

基本上我希望能够做这样的事情:

class Foo {
int a
String b
}

def data = [id: 99, a: 11, b: "bar"] //99 is the id of an existing record
def foo = new Foo(data)
foo.update() //or some other comparable persistence mechanism

谢谢

最佳答案

只要您的映射键与对象属性具有相同的名称,您就可以使用executeUpdate,而无需使用闭包或函数指定各个属性名称,如下所示:

def updateString = { obj, map ->
def str = ""
map.each { key, value ->
str += "${obj}.${key}=:${key},"
}

return str[0..-2]
}

def data= [foo:"bar", machoMan:"RandySavage"]

在本例中,println updateString("f", data) 返回"f.foo=:foo,f.machoMan=:machoMan"

然后你可以这样做:

Foo.executeUpdate("update Foo f set ${updateString("f", data)}", data)

或者当然您可以将它们组合成一个闭包或函数。

关于groovy - GORM - 更新对象而不先检索它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13354816/

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