在findBy或listOrderBy方法中使用transient属性

时间:2011-11-05 19:26:47

标签: hibernate grails dns

我有一个使用一些瞬态属性foo的域类。现在我想在这个属性上使用listOrderByFoo,但是我收到错误“无法解析属性:foo”。 有没有办法在listOrderByProperty()或findByProperty()中使用瞬态属性?

class Bar {
 String name
 static transients = ['foo']
 def getFoo() {
   ...
 }
}

Bar.findAllByFooIsNotNull()
Bar.listOrderByFoo()

1 个答案:

答案 0 :(得分:11)

不幸的是没有。就像Matt在他对你的问题的评论中所说,由于这些字段被标记为瞬态,因此它们不会持久存储到数据库中,因此您无法查询它们。如果要通过瞬态属性查找或列出,则需要编写一个闭包来迭代已设置transient属性的对象列表。没有动态GORM方法可以用来做它。

def bars = [ new Bar(foo:1), new Bar(foo:2), new Bar(foo:4), new Bar(foo:3) ];

// Find bar with foo=3
bars.find { it.foo == 3 }

// Sort bars by foo
bars.sort { a,b -> a.equals(b)? 0: a.foo<b.foo? -1: 1 }