在域 class 中声明布尔值而不出现在数据库中

Declaring booleans in a domain class without appearing in database

我有一些布尔值在我的 grails 项目(服务和控制器等)中使用,所以它们在我的域中声明 class 但我不希望它们出现在 table 中数据库。我没有清除它们的布尔值,而是尝试了 Def,但这不起作用。有办法吗?

如果您想要 属性 的域 class 不存储在数据库中,请使用 transients.

这是一个简单的例子:

class Thing {
   String name
   boolean flag
   boolean anotherFlag
   static transients = ['flag', 'anotherFlag']
}

如果您定义 gettersetter 而没有声明对象本身,我从 Burt Beckwith 的一个 grails 视频中挑选的东西在 grails 域 classes默认情况下,它本身成为一个瞬态对象。所以按照上面而不是所有的声明,如果你有

//This will return the same value
boolean getFlag() { 
  return someField && someOtherField 
}
//so you call `object.flag` or `object.getFlag()`

这样就不必再声明瞬态值,同时让您有机会即时应用一些逻辑。

老实说,您似乎同时使用域 class 进行验证和输入。通常我在 src 中分离并创建一个验证 class 来完成这部分,并让域 class 来做原始工作 - 按照说

保持它更干净