一尘不染

在findBy或listOrderBy方法中使用过渡属性

hibernate

我有一个使用一些临时属性foo的域类。现在,我想在此属性上使用listOrderByFoo,但出现错误“无法解析属性:foo”。有什么方法可以在listOrderByProperty()或findByProperty()中使用瞬态属性吗?

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

Bar.findAllByFooIsNotNull()
Bar.listOrderByFoo()

阅读 320

收藏
2020-06-20

共1个答案

一尘不染

抱歉不行。就像Matt在对您的问题的评论中说的那样,由于这些字段被标记为临时字段,因此它们不会持久保存到数据库中,因此您无法查询它们。如果要按瞬时属性查找或列出,则需要编写一个闭包以迭代已设置了瞬时属性的对象列表。您没有可以使用的动态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 }
2020-06-20