文档章节

HibernateTemplate删除数据内存泄漏分析

翰霖学院
 翰霖学院
发布于 2017/07/24 08:59
字数 312
阅读 7
收藏 0

在使用HibernateTemplate删除数据的时候常用的方法如下:

public void deleteAll(final Collection entities) throws DataAccessException
public void delete(Object entity) throws DataAccessException

这两种方法删除的都是持久化对象,所以一般在删除数据之前需要获取到这些对象,代码参考如下:

List<User> results = (List<User>) getHibernateTemplate().find(
                    "from User where name= ?", name);
getHibernateTemplate().deleteAll(results);`

在执行find方法时,查询相关的数据放入缓存中,同时会实例化对应数量的对象,这些数据都需要耗费JAVA的堆内存,会导致内存的资源紧张和内存回收的频繁,内存泄漏

在实际使用过程中如下出现删除的数据量比较大建议直接删除相关的数据,不需要查询数据在执行删除。参考方法如下:

  1. 使用bulkUpdate方法,但是这种方法不会处理一级、二级缓存

    
    this.getHibernateTemplate().bulkUpdate("delete from User where name= ?", name);
  2. 使用原生SQL

    this.getHibernateTemplate().execute(new HibernateCallback<Object>() {
    
        @Override
        public Object doInHibernate(Session session) throws HibernateException, SQLException {
            SQLQuery query = session.createSQLQuery("delefe from user t where t.name = ?");
            query.setString(0, name);
            query.executeUpdate();
            return null;
        }
    });
    
  3. 使用Hibernate HQL

    this.getHibernateTemplate().execute(new HibernateCallback<Object>() {
    
        @Override
        public Object doInHibernate(Session session) throws HibernateException, SQLException {
            Query query = session.createQuery("delete from User where name = ?");
            query.setString(0, "");
            query.executeUpdate();
            return null;
        }
    });

© 著作权归作者所有

翰霖学院
粉丝 0
博文 67
码字总数 45112
作品 0
济南
高级程序员
私信 提问
深入分析 ThreadLocal 内存泄漏问题

前言 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。但是如果滥用 ,就可能会导致内存泄漏。下面,我...

Hosee
2016/08/08
577
0
JAVA内存的“防水补漏”解决方案

Java内存泄漏是每个Java程序员都会遇到的问题,程序在本地运行一切正常,可是布署到远端就会出现内存无限制的增长,最后系统瘫痪,那么如何最快最好的检测程序的稳定性,防止系统崩盘,作者用...

loki_lan
2013/04/09
864
6
Android进阶7:内存优化——LeakCanary原理分析

好的项目离不开健壮的代码,对于想要写出健壮的代码,解决内存泄漏是必须的。 对于LeakCanary,对于大多人是不陌生的,也就是检测内存泄漏的工具。可能在代码中我们会这样引入LeakCanary: /...

天王盖地虎626
06/21
25
0
知识点

蓝厂: 1.事件分发流程 2.View的渲染机制 3.动画的原理,底层如何给上层信号 编译打包的过程 5.Android有多个资源文件夹,应用在不同分辨率下是如何查找对应文件夹下的资源的,描述整个过程 ...

咖喱配胡椒
2017/10/10
0
0
深入分析 ThreadLocal 内存泄漏问题

深入分析 ThreadLocal 内存泄漏问题 前言 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。但是如果滥...

年少爱追梦
2016/08/16
20
0

没有更多内容

加载失败,请刷新页面

加载更多

排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
41分钟前
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
今天
9
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
今天
6
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
今天
8
0
Flutter 系列之Dart语言概述

Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧 一、...

過愙
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部