我正在尝试将对象保存在循环中,并且我不想在遇到错误时停止工作,因此我的代码如下所示:
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。 我的代码有什么问题吗?任何评论都将非常感谢!
答案 0 :(得分:1)
当会话抛出异常时,您不应该继续它,因为它处于不一致状态。 如果抛出异常,您应该在回滚所有内容中执行保存。
搜索“发生异常后不刷新会话”以获取更多信息
此外,这部分代码看起来很奇怪:
if (model!= null) {
getHibernateTemplate().getSessionFactory().evict(Model.class, model.getId());
}
getHibernateTemplate().evict(model);
当模型为空时它应该做什么?你不应该把最后一行放在if语句中吗?