2011-11-05 33 views
3

我有一個使用一些瞬態屬性foo的域類。現在我想在這個屬性上使用listOrderByFoo,但是我得到錯誤「無法解析屬性:foo」。 是否有任何方式使用listOrderByProperty()或findByProperty()中的瞬態屬性?在findBy或listOrderBy方法中使用瞬態屬性

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

Bar.findAllByFooIsNotNull() 
Bar.listOrderByFoo() 
+2

根據定義,瞬態屬性不會持續存在。你如何期望查詢Hibernate基本上被忽略的屬性? –

+0

由於瞬態屬性主要是計算的東西,我想我可以在sql語句中使用它們,如定義變量(例如COUNT(*)作爲數字) – skurt

回答

10

不幸的是沒有。就像馬特在他對你的問題的評論中所說的那樣,由於這些字段被標記爲暫時的,它們不會被持久化到數據庫,因此你無法查詢它們。如果要查找或列出瞬態屬性,則需要編寫一個閉包來遍歷已設置瞬態屬性的對象列表。沒有可用於實現的動態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 } 
+0

謝謝,我將使用它並檢查性能。 – skurt

相關問題