确定域对象是否持久
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.
关联
如何确定域 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.