我发现,如果grails服务中发生任何问题并且未捕获到异常,则会清除hibernate会话。我有一个所有控制器的拦截器,我有一个数据库事务的方法(不好的做法)。我的情况是这样的:
在AllInterceptor类:
class AllInterceptor {
boolean before() {
def xyz = getValueFromDomain(session.domain);
def getValueFromDomain(def domain)
{
DomainB domainb
try{
def domainA = DomainA.findByUrl(domain)
if (domainA){
domainb = domainA.dwClient
}
}catch(Exception e){
log.warn("Exception occurred");
e.printStackTrace();
}
return domainb
}
}
}
在DashBoardController:
getChartData(){
def chartData = chartService.getChartData();
if(!chartData){
render (status : 204)
}else{
render chartData as JSON;
}}
在chartService:
getChartData(){
def chartData = '';
try{
throw new Exception();
}catch(Exception e){
}
return chartData;
}
这里,异常已经在服务中捕获,并且仪表板控制器也没有异常,但是当另一个控制器被调用时,异常被抛出为 org.hibernate.HibernateException:找不到当前线程的会话< / strong> at def xyz = getValueFromDomain(session.domain);
这里我不明白导致hibernate会话清除的原因。如果服务中的异常没有被捕获并且被传播但是异常被捕获,则它将被清除。那么为什么要清除hibernate会话呢?请帮忙 !