如何确定域类实例是否是持久的,即是从数据库加载的?我正在寻找一个可以为此对象返回false
的属性/方法
def book = new Book(name: 'foo')
但是会为此对象返回true
def book = Book.findByName('foo')
检查真实的id
属性是否可靠,例如
boolean isPersistent = book.id
答案 0 :(得分: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
将起作用,但并不总是正确的,因为您始终可以将长值分配给id属性非持久性实例(保存时会更新)。
请注意,对于与Hibernate会话分离的持久化实例,使用isAttached
将失败 - 如果两者都是持久性的(即它是从数据库数据中实例化的)并且当前与会话相关联,则它只是true
。