grails PreUpdateEventListener无限循环

时间:2012-02-13 17:14:50

标签: grails gorm

我的应用程序中有PreUpdateEventListener。它看起来像:

public boolean onPreUpdate(PreUpdateEvent event) {
  if (!needClasses.contains(entity?.class?.name))
   return false

  def entity = event.entity
  boolean rez = false
  entity.withSession {org.hibernate.Session session -> 
    def tryFind = Book.executeQuery("select s.id from ${entity.class.name} s where s.id=? ".toString(), [entity.id])
    rez = (tryFind != null && tryFind.size() > 0)
  } 

  return !rez
}

执行Book.executeQuery时再次调用onPreUpdate,转到此行等等。最后,这个无限的自我调用会导致堆栈溢出异常崩溃。 有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

实体是否可能与Book的实例不同?

尝试使用findAll()方法而不是executeQuery。

Book.findAll("From ${entity.class.name} s where s.id=? ", [entity.id])
//OR this is same as above
def exist = entity.class.get(entity.id)

如果实体可以是不同类型的Book,而不是在Book类上调用findAll,则应该在适当的类上调用它。

首先尝试使用findAll,我想这会解决您的问题。