session.flush()在Hibernate中导致空指针异常

时间:2013-05-28 08:37:23

标签: java hibernate

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

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会话绝对不是null。 我的代码有什么问题吗?任何评论都将非常感谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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