我有一个很好的小域类,它由三个整数组成但没有主键(因为数据库设计不佳......重写不可能):
class Domain implements Serializable {
Integer foo
Integer bar
Integer flag
static mapping = {
table 'domain'
version false
id composite: ['foo', 'bar']
foo column: 'foo_nbr'
flag column: 'value_I_want_flag'
bar column: 'bar_nbr'
}
}
我希望能够使用foo和bar
的复合id通过read函数访问该标志,例如
Integer yayFlag = Domain.read(foo, bar).flag
这是最好的做法吗?
答案 0 :(得分:3)
根据docs on this,您应该能够通过get()
语法引用原型对象:
def d = Domain.get(new Domain(foo: 23, bar: 999))
请注意,它还建议实施hashCode()
和equals()
(使用id组件字段),并创建类Serializable
。
如果要求read()
,您可以尝试相同,但我没有搜索来源以了解这是否有效(get()
的参考文档实际上并未明确表明你可以做到以上几点,所以不要说在read()
参考文档中没有结论。我已经离开Grails一段时间了,但您也可以在discard()
之后尝试get()
以避免在写入时写入数据库。
答案 1 :(得分:2)
你不能这样做,你需要像Brian提到的那样创建一个原型实例。您可以使用您想要使用的语法创建一个帮助器方法,以便为您工作:
static Domain read(int foo, int bar) {
read new Domain(foo: foo, bar: bar)
}
您可能也想要一个类似的get
方法。