首页 > 数据库 >关于hibernate执行sql语句后,进程不关闭的问题

关于hibernate执行sql语句后,进程不关闭的问题

时间:2023-03-05 10:01:13浏览次数:41  
标签:语句 hibernate org 线程 sql import null sf


写了一个简单的测试程序,就是java查询数据库的,后面发现了数据库查询结束后,进程一直不会结束,在调试的时候,发现生成了一个线程,是这个线程不关闭。

/**
*
*/
package com.test.mysql;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

/**
* @filename BaseDAO.java
* @author code by jianghuiwen
* @mail [email protected]
*
* 上午11:51:40
*/
public class BaseDAO {
private static SessionFactory sf=null;
public void save(Object o)
{
sf = new Configuration().configure().buildSessionFactory();
Session s = null;
Transaction t = null;

try{
s = sf.openSession();
t = s.beginTransaction();
Student temp=(Student) s.get(Student.class, 1);
temp.setName("wangjun");
s.save(temp);
t.commit();
}catch(Exception err){
t.rollback();
err.printStackTrace();
}finally{

s.close();
}
}

public void update(String sql)
{
sf = new Configuration().configure().buildSessionFactory();
Session s = null;
Transaction t = null;

try{
s = sf.openSession();
t = s.beginTransaction();
Query query = s.createQuery(sql);
query.executeUpdate();

t.commit();
}catch(Exception err){
t.rollback();
err.printStackTrace();
}finally{

s.close();

}

}


public static void main(String[] args) {

new BaseDAO().update("update Student set password='11111' where id=1");
System.out.println("over");

}

}


关于hibernate执行sql语句后,进程不关闭的问题_sql


后面请教了公司BOSS,才发现是这样一个简单的问题:

--------------------------------------


 hibernate建立SessionFactory的时候,会建立一个线程
关闭的时候,关闭session是不会关闭这个线程的
所以会导致和数据库连接的线程一直存在
,因此要关闭和数据库的连接,一定要关闭SessionFactory 




因此只要在:

finally{  


            s.close();  
            sf.close();
      }  


加上把sf关闭的语句就可以了。

标签:语句,hibernate,org,线程,sql,import,null,sf
From: https://blog.51cto.com/u_15990596/6101120

相关文章

  • DVWA 之 SQL Injection-SQL注入
    七、SQLInjection-SQL注入原理SQL注入是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到恶意执行SQL语句的目的。手工注入常规思路判断是否存在注入,注......
  • DVWA 之 SQL Injection(Blind) - SQL注入(盲注)
    八、SQLInjection(Blind)-SQL注入(盲注)原理SQL盲注与一般注入的区别在于一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常无法从显示页面......
  • SQL中只要用到聚合函数就一定要用到group by 吗?
    今天记录一个弱智问题,一直没发现这个问题。答:看情况1、当聚集函数和非聚集函数出现在一起时,需要将非聚集函数进行groupby2、当只做聚集函数查询时候,就不需要进行分组了......
  • SQL99语法实现多表查询
    3.SQL99语法实现多表查询3.1内连接(INNERJOIN)的实现语法SELECT字段列表FROMA表INNERJOINB表ON关联条件WHERE等其他子句;例SELECTe.employee_id,e.last......
  • Mysql 8.0 实现创建用户,指定用户只能访问指定的数据库中的表
    最近在做公司项目的过程中,出现了这样的需求。第三方系统需要将数据写到我们的业务系统中,由于目前这些数据没有实际的使用场景,在讨论下,为简单快捷,选择第二种方案,即不书写接......
  • SqlServer As 关键字什么情况下可以省略什么情况不可以省略
    -列别名:可以直接在列名后面添加别名,也可以使用`AS`关键字。-表别名:可以使用`AS`关键字指定,也可以直接写表名并在其后加上别名。但是,在给子查询结果集命名时,必须用`......
  • MySQL数据库:范式
    按照“数据库规范化”对表进行设计,其目的就是减少数据库中的数据冗余,以增加数据的一致性。常见的范式有1NF、2NF、3NF、BCNF。下面对这几种常见的范式进行简要分析。1、1N......
  • MySQL自增主键auto_increment原理 与 自增主键出现间隙不连续现象的定位
    一、背景:1.1、业务描述与SQL:为了保存机器上报信息(业务需求是每个机器只需保存最新的一条记录),原SQL语句如下(其中,machineId的为唯一索引,t_report_pad的id为bigint类型......
  • Sql 注入方案合集
    【以mysql数据库为例】【参考书目:sqlilabs过关手册注入天书https://www.cnblogs.com/lcamry/category/846064.html】推荐看原书,这篇文章主要做整理学习之用!Sql注入简......
  • SqlServer ROW_NUMBER() Over()分页
    --ROW_NUMBER()Over()分页,计算公式((@pageIndex-1)*@pageSize)+1And(@pageIndex*@pageSize)DECLARE@pageSizeINTDECLARE@pageIndexINT--第4页,每页显......