Grails:是否可以防止域 class 实例被持久化?
Grails: Is it possible to prevent a domain class instance from being persisted?
我想创建域class的(一个)实例(正如预期的那样,它有一个GORM 接口到我的数据库)并且仅将其用作传递数据的容器,如 Map 对象。我想绝对确定我的实例永远不会在数据库中持久化。恐怕即使没有显式调用 save()
,GORM 也会以某种方式设法将其保存在后台的数据库中。当 实例化 我的对象时,有没有办法指定 "do not persist this" 子句?我知道如何防止域 class 上的持久性,我想要的是仅防止 class 的特定 实例 上的持久性。
我现在的解决方案是在 groovy/src/
中创建一个具有相同属性和方法的 class,并将其用作我的数据容器,并根据需要进行类型转换。感觉不对,DRY 失败,hacky。
当然你也可以告诉我,我应该停止如此偏执,Grails 永远不会在没有显式保存的情况下持久化域 class instance。
Grails 不会保存域 class 的实例,除非在实例上显式调用 save()
。您可以创建一个实例并传递它,它不会被持久化。
假设您已经知道如何防止域 class 上的持久性(table 创建)。此外,您还知道 w/o 显式 .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
顺便说一句,如果您想永久禁用创建+更新+删除但同时又想对域发出查询,那么解决方案是:
static mapping = {
cache usage: "read-only"
}
def beforeInsert() {
return false
}
我想创建域class的(一个)实例(正如预期的那样,它有一个GORM 接口到我的数据库)并且仅将其用作传递数据的容器,如 Map 对象。我想绝对确定我的实例永远不会在数据库中持久化。恐怕即使没有显式调用 save()
,GORM 也会以某种方式设法将其保存在后台的数据库中。当 实例化 我的对象时,有没有办法指定 "do not persist this" 子句?我知道如何防止域 class 上的持久性,我想要的是仅防止 class 的特定 实例 上的持久性。
我现在的解决方案是在 groovy/src/
中创建一个具有相同属性和方法的 class,并将其用作我的数据容器,并根据需要进行类型转换。感觉不对,DRY 失败,hacky。
当然你也可以告诉我,我应该停止如此偏执,Grails 永远不会在没有显式保存的情况下持久化域 class instance。
Grails 不会保存域 class 的实例,除非在实例上显式调用 save()
。您可以创建一个实例并传递它,它不会被持久化。
假设您已经知道如何防止域 class 上的持久性(table 创建)。此外,您还知道 w/o 显式 .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
顺便说一句,如果您想永久禁用创建+更新+删除但同时又想对域发出查询,那么解决方案是:
static mapping = {
cache usage: "read-only"
}
def beforeInsert() {
return false
}