确定域对象是否持久

determine if domain object is persistent

如何确定域 class 实例是否持久,即是否从数据库加载?我正在寻找一个 property/method 可以 return false 这个对象

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

但是会 return true 这个对象

def book = Book.findByName('foo')

正在检查真实的 id 属性 是否可靠,例如

boolean isPersistent = book.id

使用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,检查实例是否具有 non-null id 将起作用,但并不总是正确的,因为您总是可以分配一个 long 值non-persistent 实例的 ID 属性(保存时会更新)。

请注意,对于从 Hibernate Session 分离的持久实例,使用 isAttached 将失败 - 只有 true 如果两者都是持久的(即它是从数据库数据实例化的)并且当前与 session.

关联