class Book {
String title
String author
}
findOrSaveBy*
目的
動態方法,使用網域類別的屬性來建立查詢方法表達式,回傳查詢的第一個結果。此方法的行為類似於 findBy,但它絕不會回傳 null
。如果找不到相符的執行個體,則會建立一個新的執行個體,填入查詢參數中表示的值,並儲存和回傳。此方法與 findOrCreateBy 的差異在於,此方法會儲存任何新建立的執行個體,而 findOrCreateBy 則不會。
範例
假設有網域類別 Book
以下皆為可能
def b = Book.findOrSaveByTitleAndAuthor("The Sum of All Fears", "Tom Clancy")
以下大致相同
def b = Book.findOrSaveByTitleAndAuthor("The Sum of All Fears", "Tom Clancy")
def b = Book.findByTitleAndAuthor("The Sum of All Fears", "Tom Clancy")
if (!b) {
b = new Book(title: "The Sum of All Fears", author: "Tom Clancy")
b.save()
}
說明
GORM 支援 動態尋找器 的概念。findOrSaveBy*
方法會尋找給定方法表達式的第一個結果。
由於此方法可能會建立新的執行個體並填入該執行個體的屬性,因此僅允許完全相符的條件。例如,Book.findOrSaveByTitle(authorValue) 是有效的,但 Book.findOrSaveByAuthorInList(listOfNames) 則不是。
|