2015-04-14 88 views
1

如何確定域類實例是否持久,即從數據庫加載?我正在尋找一個屬性/方法,將返回false此對象確定域對象是否持久

def book = new Book(name: 'foo') 

但將返回true此對象

def book = Book.findByName('foo') 

爲truthy id財產可靠,例如檢查

boolean isPersistent = book.id 

回答

1

使用isAttached方法或其attached物業形態:

def book = new Book(name: 'foo') 
assert !book.attached 

book.save(flush: true) 

Book.withSession { it.clear() } 
book = Book.findByName('foo') 
assert book.attached 

如果不使用分配的標識,檢查該實例有一個非空id工作,但並不總是將會是正確的,因爲您始終可以爲非持久性實例的id屬性分配一個長整型值(它將在保存時更新)。

請注意,使用isAttached將會失敗,因爲持久實例與休眠會話分離 - 如果兩者都是持久性(即從數據庫數據實例化)並且當前與會話相關聯,則它們將僅爲true