在grails验证器中包含查询时获取堆栈溢出
堆栈跟踪:在grails验证器中包含查询时获取堆栈溢出,grails,grails-validation,Grails,Grails Validation,堆栈跟踪: altEmailAddress(blank: true, nullable: true, validator: { if (it == null || it == '') { return true } else { return (User.countByEmailAddress(it) > 0 && User.countByAltEmailAddress(it) > 0) } } Testcas
altEmailAddress(blank: true, nullable: true, validator: {
if (it == null || it == '') {
return true
} else {
return (User.countByEmailAddress(it) > 0 && User.countByAltEmailAddress(it) > 0)
}
}
Testcase:testFindValidEmailAddress花费了0.429秒
造成错误
无效的
栈溢出
在com.clearlynnovative.model.User$\uuuuClinit\uuuuClosure7\uClosure13.doCall(User.groovy:36)
在com.clearlynnovative.model.User$\uuuuClinit\uuuuClosure7\uClosure13.doCall(User.groovy:36)
在com.clearlynnovative.model.User$\uuuuClinit\uuuuClosure7\uClosure13.doCall(User.groovy:36)
在com.clearlynnovative.model.User$\uuuuClinit\uuuuClosure7\uClosure13.doCall(User.groovy:36)
在com.clearlynnovative.model.User$\uuuuClinit\uuuuClosure7\uClosure13.doCall(User.groovy:36)
在com.clearlynnovative.model.User$\uuuuClinit\uuuuClosure7\uClosure13.doCall(User.groovy:36)
在com.clearlynnovative.model.User$\uuuuClinit\uuuuClosure7\uClosure13.doCall(User.groovy:36)
在com.clearlynnovative.model.User$\uuuuClinit\uuuuClosure7\uClosure13.doCall(User.groovy:36)
在com.clearlynnovative.model.User$\uuuuClinit\uuuuClosure7\uClosure13.doCall(User.groovy:36)
在com.clearlynnovative.model.User$\uuuuClinit\uuuuClosure7\uClosure13.doCall(User.groovy:36)
在com.clearlynnovative.model.User$\uuuuClinit\uuuuClosure7\uClosure13.doCall(User.groovy:36)
在com.clearlynnovative.model.User$\uuuuClinit\uuuuClosure7\uClosure13.doCall(User.groovy:36)
在com.clearlynnovative.model.User$\uuuuClinit\uuuClosure7\uClosure13.doCall(User.groovy:36)上,您应该与NewSession一起使用-请参阅 编辑:为1.1.x添加: 如果您尚未使用1.2,并且withNewSession()不可用,您可以在引导中自行连接它: Testcase: testFindValidEmailAddress took 0.429 sec Caused an ERROR null java.lang.StackOverflowError at com.clearlyINNOVATIVE.model.User$__clinit__closure7_closure13.doCall(User.groovy:36) at com.clearlyINNOVATIVE.model.User$__clinit__closure7_closure13.doCall(User.groovy:36) at com.clearlyINNOVATIVE.model.User$__clinit__closure7_closure13.doCall(User.groovy:36) at com.clearlyINNOVATIVE.model.User$__clinit__closure7_closure13.doCall(User.groovy:36) at com.clearlyINNOVATIVE.model.User$__clinit__closure7_closure13.doCall(User.groovy:36) at com.clearlyINNOVATIVE.model.User$__clinit__closure7_closure13.doCall(User.groovy:36) at com.clearlyINNOVATIVE.model.User$__clinit__closure7_closure13.doCall(User.groovy:36) at com.clearlyINNOVATIVE.model.User$__clinit__closure7_closure13.doCall(User.groovy:36) at com.clearlyINNOVATIVE.model.User$__clinit__closure7_closure13.doCall(User.groovy:36) at com.clearlyINNOVATIVE.model.User$__clinit__closure7_closure13.doCall(User.groovy:36) at com.clearlyINNOVATIVE.model.User$__clinit__closure7_closure13.doCall(User.groovy:36) at com.clearlyINNOVATIVE.model.User$__clinit__closure7_closure13.doCall(User.groovy:36) at com.clearlyINNOVATIVE.model.User$__clinit__closure7_closure13.doCall(User.groovy:36)
还有别的选择吗?我还没有升级到1.2,仍然在1.1.2上
import org.hibernate.Session
import org.springframework.orm.hibernate3.HibernateCallback
import org.springframework.transaction.support.TransactionSynchronizationManager
import org.springframework.orm.hibernate3.SessionHolder
import org.springframework.orm.hibernate3.HibernateTemplate
class BootStrap {
def grailsApplication
def sessionFactory
def init = { servletContext ->
for (domainClass in grailsApplication.domainClasses) {
domainClass.metaClass.static.withNewSession = { Closure callable ->
HibernateTemplate template = new HibernateTemplate(sessionFactory)
SessionHolder sessionHolder = TransactionSynchronizationManager.getResource(sessionFactory)
Session previousSession = sessionHolder?.session
try {
template.alwaysUseNewSession = true
template.execute({ Session session ->
sessionHolder.addSession(session)
callable(session)
} as HibernateCallback)
}
finally {
if (previousSession) {
sessionHolder.addSession(previousSession)
}
}
}
}
}
def destroy = {}
}