Antonio Dragos
Antonio Dragos

Reputation: 2803

determine if domain object is persistent

How can I determine if a domain class instance is persistent, i.e. was loaded from a database? I'm looking for a property/method that would return false for this object

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

But would return true for this object

def book = Book.findByName('foo')

Is checking for a truthy id property reliable, e.g.

boolean isPersistent = book.id

Upvotes: 1

Views: 762

Answers (1)

Burt Beckwith
Burt Beckwith

Reputation: 75671

Use the isAttached method or its attached property form:

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

book.save(flush: true)

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

If you don't use assigned ids, checking that the instance has a non-null id will work but isn't always going to be correct since you can always assign a long value to the id property of a non-persistent instance (it will be updated when saved).

Note that using isAttached will fail for persistent instances that are detached from a Hibernate Session - it's only true if both persistent (i.e. it was instantiated from database data) and currently associated with a session.

Upvotes: 1

Related Questions