我有一个不错的小域类,它由三个整数组成,但没有主键(由于数据库设计不佳......重写是不可能的):
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 通过读取函数访问该标志
比如
Integer yayFlag = Domain.read(foo, bar).flag
这有最佳实践吗?
最佳答案
根据docs on this ,您应该能够通过 get()
语法使用原型(prototype)对象进行引用:
def d = Domain.get(new Domain(foo: 23, bar: 999))
请注意,它还建议实现 hashCode()
和 equals()
(使用 id 组件字段),并使类可序列化
。
如果 read()
是一个要求,您可以尝试相同的操作,但我还没有搜索源代码以了解这是否有效(get()
don'的引用文档实际上并没有明确表明您可以执行上述操作,因此在 read()
引用文档中没有说这不是结论性的)。我已经离开 Grails 一段时间了,但您也可以在 get()
之后尝试 discard()
以避免刷新时数据库写入。
关于database - Grails,在具有复合 id 的域类上使用 read(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13749063/