gpt4 book ai didi

Grails:是否可以防止域类实例被持久化?

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

我想创建域类的(一个)实例(正如预期的那样,它有一个到我的数据库的 GORM 接口(interface))并且只将它用作传递数据的容器,例如 Map 对象。我想绝对确定我的实例永远不会持久保存在数据库中。恐怕即使没有显式调用 save(),GORM 也会以其所有的聪明之处设法将其保存在后台的数据库中。 实例化我的对象时,有没有办法指定“不保留此”子句?我知道如何防止域类的持久性,我想要的是仅防止类的特定实例的持久性。

我现在的解决方案是在 groovy/src/ 中创建一个具有相同属性和方法的类,并将其用作我的数据容器,并根据需要进行类型转换。感觉不对,DRY 失败,而且很老套。

当然你也可能会告诉我,我应该停止如此偏执,Grails 永远不会在没有显式保存的情况下持久化域类实例

最佳答案

假设您已经知道如何防止领域类的持久化(表创建)。此外,您还知道没有显式 .save() 对象将不会被持久化。那么,你究竟想要什么?是不是就像..即使有人不小心调用了obj.save(),也永远不会持久化。虽然这没有任何意义,但根据您的查询,

Is there a way to specify a "do not persist this" clause when instantiating my object?

是的,有办法:

class MyFishyDomain {
String pwd
// properties
// constraints

def beforeInsert() {
if (!this.pwd.equals("drago")) return false
}
def beforeUpdate () {
if (!this.pwd.equals("drago")) return false
}

}

现在..

new MyFishyDomain(pwd:"drago").save()  // success
new MyFishyDomain(pwd:"rambo").save() // fail

顺便说一句,如果您想永久禁用 Create+Update+Delete 但同时又想对域发出查询,那么解决方案是:

static mapping = {
cache usage: "read-only"
}
def beforeInsert() {
return false
}

关于Grails:是否可以防止域类实例被持久化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28908364/

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