(快速參考)

findOrCreateBy*

目的

使用網域類別的屬性建立查詢方法表達式的動態方法,回傳查詢的第一個結果。此方法的行為類似於 findBy,但絕不會回傳 null。如果找不到相符的執行個體,就會建立一個新的執行個體並回傳,並填入查詢參數中表示的值。此方法與 findOrSaveBy 的不同處在於,此方法不會儲存新建立的執行個體,而 findOrSaveBy 會。

範例

假設網域類別為 Book

class Book {
   String title
   String author
}

以下皆為可能

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) 無效。