Java 在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?

2023-12-16 10:28

本文主要是介绍Java 在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Java 在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?

在 Hibernate 中,getCurrentSession()openSession() 是两种获取 Hibernate Session 的方法,它们的主要区别在于事务管理和线程关联性。

getCurrentSession()

  1. 与当前线程绑定: 使用 getCurrentSession() 时,Hibernate 会将 Session 与当前线程进行绑定,通常在事务范围内。

  2. 事务管理: getCurrentSession() 要求事务管理器(例如在 Spring 中的事务管理器)负责事务的开始和提交,而不是由开发人员手动管理事务。

  3. 线程关联性: 通常在 Java EE 或者 Spring 环境中使用,由容器负责管理事务。

  4. 自动关闭: 在事务提交或回滚时,Hibernate 会自动关闭与当前线程关联的 Session。

public class ExampleDao {@Autowiredprivate SessionFactory sessionFactory;public void exampleMethod() {// 获取当前线程关联的 SessionSession session = sessionFactory.getCurrentSession();// 使用 session 进行操作Transaction transaction = session.beginTransaction();// 执行数据库操作transaction.commit();}
}

openSession()

  1. 手动管理事务: 使用 openSession() 时,开发人员需要手动管理事务的开始、提交和回滚。

  2. 不与当前线程绑定: openSession() 不会将 Session 与当前线程进行绑定,开发人员需要显式地打开和关闭 Session。

  3. 适用于非容器环境: 在独立的 Java 应用程序中或者在某些非容器环境中使用时较为常见。

  4. 需要手动关闭: 使用完 Session 后,需要手动关闭 Session,以释放数据库连接。

public class ExampleDao {@Autowiredprivate SessionFactory sessionFactory;public void exampleMethod() {// 手动打开一个新的 SessionSession session = sessionFactory.openSession();// 使用 session 进行操作Transaction transaction = session.beginTransaction();// 执行数据库操作transaction.commit();// 手动关闭 Sessionsession.close();}
}

总结:

  • getCurrentSession() 适用于与容器环境(如 Spring)结合使用,由容器管理事务和线程关联性。
  • openSession() 适用于非容器环境,开发人员需要手动管理事务和 Session 的生命周期。

这篇关于Java 在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/500130

相关文章

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S

Spring中配置ContextLoaderListener方式

《Spring中配置ContextLoaderListener方式》:本文主要介绍Spring中配置ContextLoaderListener方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录Spring中配置ContextLoaderLishttp://www.chinasem.cntene

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码