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) 则无效。 |