2010-11-02 65 views
2

我有一組相關類似這樣的領域對象:我怎麼能指「這個」對象在一個Grails條件查詢

class Book { 
    static belongsTo = [author: Author] 
} 

class Contract { 
    static belongsTo = [author: Author] 
    Book book 
} 

class Author { 
    static hasMany = [books: Book, contracts: Contract] 
} 

我想創建一個連接對所有查詢一本書的作者合同,其中合同書是「這本書」。我想回答的問題是「合同下的所有書籍是什麼?」在這裏我有什麼爲標準,但我不知道如何來指代「這個」對象:

Book.createCriteria().list() { 
    author { 
     contracts { 
      eqProperty('book', '??') // what here?? 
     } 
    } 
} 

可以參考我的「這個」對象或以某種方式爲它創建一個別名?

+0

這可能是有用的,以及HTTP:// adhockery。 blogspot.com/2009/04/associations-and-criteria-queries.html – 2010-11-03 08:48:24

回答

1

沒有寫一個單元測試,但我認爲你可以做到這一點..

GORM Documentation向下滾動到渴望獲取的例子來看看例子

Book.createCriteria().list() { 
    author { 
     contracts { 
      eqProperty('book.id', book.id) // what here?? 
     } 
    } 
} 
+0

關閉,但這並不按我希望的方式工作。 'eqProperty'有兩個屬性名稱。我可以使用'eq'來找到一本特定的書,但我試圖讓它加入書和書之間的連接。 – ataylor 2010-11-03 16:11:50

+0

@ataylor是否嘗試使用'eq'而不是'eqProperty' – 2010-11-03 17:06:54

+0

這也沒有奏效。這不是一本我想找的具體書,而是我想參加書桌。謝謝你的建議。 – ataylor 2010-11-03 17:45:40

0

而不是使用標準建造的,是直接HQL的一個選項?我不是最流暢的HQL,但也許你可以這樣做:

// should return a collection of Books 
Contract.executeQuery('select distinct c.book from Contract c') 

如果你需要它是特定作者,您可以添加一個where子句相應(docs)。

+0

這是一種可能性,但我還沒有想出如何將[HQL查詢鏈接在一起](http://www.grails.org/doc/latest/ref/Domain%20Classes/namedQueries.html),如條件查詢,以及我非常喜歡這個功能。 – ataylor 2010-11-03 18:23:13

0

沒有在這臺機器上運行的grails版本,我無法測試它的語法。

您可能能夠做這樣的事情: 添加「導入org.hibernate.FetchMode爲FM」到控制器或服務

Contract.withCriteria{ 
    createAlias('book','b') 
    fetchMode('book',FM.EAGER) 
}.book.unique()