我的应用程序中有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,转到此行等等。最后,这个无限的自我调用会导致堆栈溢出异常崩溃。 有人可以帮助我吗?
答案 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,我想这会解决您的问题。