1

我正在尝试将对象保存在一个循环中,并且我不想在遇到错误时停止我的工作,所以我的代码如下所示:

for(Model model:list){
 try {

                if (model != null) {
                    getHibernateTemplate().saveOrUpdate(model);
                    getHibernateTemplate().flush();
                } 
            } catch (Exception e) {
               log.error(e);
                if (model!= null) {
                    getHibernateTemplate().getSessionFactory().evict(Model.class, model.getId());
                }
                getHibernateTemplate().evict(model);
            }
}

它工作正常,除非一个对象保存失败,所有其余对象都因 java.lang.NullPointerException 而失败。根据我的调试跟踪,Hibernate 会话绝对不为空。我的代码有什么问题吗?任何意见将不胜感激!

4

1 回答 1

1

当会话抛出异常时,您不应该继续它,因为它处于不一致的状态。如果抛出异常,您应该在事务中进行保存以回滚所有内容。

搜索“发生异常后不刷新会话”以获取更多信息

此外,这部分代码看起来很奇怪:

if (model!= null) {
   getHibernateTemplate().getSessionFactory().evict(Model.class, model.getId());
}
getHibernateTemplate().evict(model);

当模型为空时应该做什么?你不应该把最后一行放在 if 语句中吗?

于 2013-05-28T08:43:49.873 回答