class Book {
String title
String author
}
findOrCreateBy*
目的
使用網域類別的屬性建立查詢方法表達式的動態方法,回傳查詢的第一個結果。此方法的行為類似於 findBy,但絕不會回傳 null
。如果找不到相符的執行個體,就會建立一個新的執行個體並回傳,並填入查詢參數中表示的值。此方法與 findOrSaveBy 的不同處在於,此方法不會儲存新建立的執行個體,而 findOrSaveBy 會。
範例
假設網域類別為 Book
以下皆為可能
def b = Book.findOrCreateByTitle("The Shining")
b = Book.findOrCreateByTitleAndAuthor("The Sum of All Fears", "Tom Clancy")
b = Book.findByAuthorInList(["Douglas Adams", "Hunter S. Thompson"])
以下大致相當
def b = Book.findOrCreateByTitle("The Shining")
def b = Book.findByTitle("The Shining")
if (!b) {
b = new Book(title: "The Shining")
}
說明
GORM 支援 動態尋找器 的概念。findOrCreateBy*
方法會尋找給定方法表達式的第一個結果。
由於此方法可能會建立新的執行個體並填入該執行個體的屬性,因此只允許完全相符的準則。例如,Book.findOrCreateByDate(dateValue) 有效,但 Book.findOrCreateByDateGreaterThan(dateValue) 無效。
|