【发布时间】:2015-03-06 21:57:10
【问题描述】:
我想创建一个(一个)instance Domain 类(正如预期的那样,它有一个到我的数据库的 GORM 接口)并且只将它用作传递数据的容器,例如 Map 对象。我想让绝对确定我的实例永远不会保存在数据库中。我担心,即使没有明确调用save(),GORM 会以某种方式设法将其保存在幕后的数据库中。有没有办法在实例化我的对象时指定“不保留此”子句?我知道如何防止域类的持久性,我想要的是仅防止类的特定实例上的持久性。
我现在的解决方案是在groovy/src/ 中创建一个具有相同属性和方法的类,并将其用作我的数据容器,并根据需要进行类型转换。感觉不对,DRY 失败,而且很老套。
当然,你也可以告诉我,我不应该再这么偏执了,Grails 永远不会在没有明确保存的情况下持久化域类instance。
【问题讨论】:
-
使用
MyDomain.read()加载域类grails.github.io/grails-doc/3.0.x/ref/Domain%20Classes/…的只读实例 -
read()要求已经持久化实例。 -
那么你真正想要的是一个Command对象而不是一个域实例。
-
我不知道如何更好地表达我的问题。到目前为止,所有答案和 cmets 都已脱离上下文。请仔细阅读。
-
只需使用扩展您的 Domain 类的 Command 类,它不会被 GORM 映射,您不必编写除
class MyCommand extends MyDomainClass {}之外的任何代码并完成它。它将继承你所有的限制和一切。这就是你要找的。你想要一个 command object 而不是 domain object 它们不同是有原因的,你需要的是那个原因(等等)。
标签: grails grails-orm