Как я могу узнать, был ли удален экземпляр домена Grails / GORM в текущем tx (Hibernate)? - PullRequest
5 голосов
/ 29 ноября 2011

Я ищу тест isDeleted () для экземпляров Grails (GORM):

Project p = ... get persistent entity from somewhere ...
p.delete() // done in some nested logic
... sometime later in the code prior to commit of the tx ...
if (!p.isDeleted()) ... do some more stuff ...

В моем приложении логика, которая может удалить p, находится в другом месте, и передача флага назад или что-то еще будет болезненной.

Ответы [ 3 ]

6 голосов
/ 30 ноября 2011

Вам необходимо перейти в сеанс Hibernate и контекст постоянства:

import org.hibernate.engine.Status

boolean deleted = Project.withSession { session ->
   session.persistenceContext.getEntry(p).status == Status.DELETED
}
1 голос
/ 29 ноября 2011

Вы можете использовать события GORM для автоматической установки свойства в объекте после его удаления, например,

class Project{
   String name
   Boolean isDeleted = false
   static transients = [ "isDeleted" ]

  def afterDelete() { 
   isDeleted = true
  }
}

Если по какой-либо причине вы не хотите изменятьклассы домена, вы можете просто использовать метод exists:

if (Project.exists(p.id)) {
  // do something....
}
0 голосов
/ 29 ноября 2011

мои мысли:

Project p = ... 
def id = p.id
p.delete(flush:true)
...
if (p.read(id)) //... do some more stuff ...
...