本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

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

发布于2024-12-03 10:16     阅读(745)     评论(0)     点赞(0)     收藏(3)


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

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 会话绝对不为空。我的代码有什么问题吗?任何评论都将不胜感激!


解决方案


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

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

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

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

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



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/694203/c6e01ae34d7a33de4484/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

0 0
收藏该文
已收藏

评论内容:(最多支持255个字符)