hibernate中的session用法

article/2025/6/29 22:41:42
Session的主要功能是提供对映射的实体类实例的创建,读取和删除操作。实例可能以下面三种状态存在:

临时状态(transient): 不曾进行持久化,未与任何Session相关联
持久化状态(persistent): 仅与一个Session相关联

脱管状态(detached): 已经进行过持久化,但当前未与任何Session相关联


1,通过get()或load()方法得到的实例都是持久化状态的,把临时实例变成持久化实例

2,持久化实例可以通过调用delete(),close()变成脱管状态。

3,脱管状态的实例可以通过调用 update()、0saveOrUpdate()、lock()或者replicate()进行持久化。

myeclipse中session中的方法:



Session的load()与get()方法:

hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别:

1)当数据库中不存在与OID对应的记录时,load()方法抛出org.hibernate.ObjectNotFoundException异常,而get()方法返回为null
(2)load方法采用配置的加载策略(默认为延迟加载),而get()方法则会忽略配置,总是采用立即加载方法。


Session接口提供了4个重载的get方法,分别通过“持久类+主键”和“全类名+主键”以及“锁选项”来获取实体对象。

public Object get(Class clazz, Serializable id);
public Object get(Class clazz, Serializable id, LockOptions lockOptions);public Object get(String entityName, Serializable id);
public Object get(String entityName, Serializable id, LockOptions lockOptions);

 public void testGet() throws Exception {                                            Session session = sessionFactory.openSession();                                 Student student = (Student) session.get(Student.class, 1);                     // Student student = (Student) session.get("com.entity.Student", 1);   System.out.println(student);                                                    session.close();                                                                
}     
Session的save()方法:
Session的save()方法使一个临时对象转变为持久化对象
(1) 将临时对象加入到Session缓存中,使其进入持久化状态。
(2)选用 映射文件指定的标识符生成器,为持久化对象分配唯一的ID
(3)计划 执行一个insert语句


注意:session的save()方法是用来持久化临时对象的。不应将持久化对象或游离对象传递给save()方法

若将持久化对象传递给save()方法,则该步保存操作是多余的。
若将游离对象传递给save()方法,则会重新生成ID,再保存一次


Session的update()方法:

Session的update()方法使一个脱管对象转变为持久化对象。它完成以下操作:
(1)将游离对象加入到Session缓存中,使其转变为持久化对象。
(2)计划执行一个update语句。


Session的saveOrUpdate()方法:

Session的saveOrUpdate()方法同时包含了save()方法与update()方法的功能,如果传入的参数是临时对象,就调用save()方法;如果传入的参数是游离对象,就调用update()方法。

Session的delete()方法

Session的delete()方法用于从数据库中删除一个java对象。delete()方法既可以删除持久化对象,也可以删除脱管对象。其处理过程如下:
(1)如果传入的参数是脱管对象,则先使脱管对象与Session关联,使它变为持久化对象。如果参数是持久化对象,则忽略该步。
(2)计划执行一个delete语句。
(3)把对象从Session缓存中删除,该对象进入删除状态。







System.out.println("获取Session...");   
Session session = HibernateSessionFactory.currentSession(); 
System.out.println("开始Transaction..."); 
Transaction tx = session.beginTransaction();   
Test my_hibernate = null; 
System.out.println("Iterator查询..."); 
Iterator iterator = session.iterate("from Test order by xm"); while(iterator.hasNext()) { my_hibernate = (Test)iterator.next(); System.out.println(my_hibernate.getXm() + " "+ my_hibernate.getXb()); }   
System.out.println("List查询..."); List list = session.find("from Test order by xm");   for(int i = 0;i < list.size();i++) { my_hibernate = (Test)list.get(i); System.out.println(my_hibernate.getXm() + " "+ my_hibernate.getXb()); }   
System.out.println("Query查询..."); 
Query query = session.createQuery("from Test order by xm"); 
list = query.list(); 
for(int i = 0;i < list.size();i++) 
{ my_hibernate = (Test)list.get(i); System.out.println(my_hibernate.getXm() + " "+ my_hibernate.getXb()); 
} 
iterator = query.iterate(); 
while(iterator.hasNext()) 
{ my_hibernate = (Test)iterator.next(); System.out.println(my_hibernate.getXm() + " "+ my_hibernate.getXb()); 
}   
System.out.println("Criteria查询..."); 
Criteria criteria = session.createCriteria(Test.class);   
criteria.add(Expression.eq("xb","f")); 
list = criteria.list();   
for(int i = 0;i < list.size();i++) 
{ my_hibernate = (Test)list.get(i); System.out.println(my_hibernate.getXm() + " "+ my_hibernate.getXb()); 
} 
System.out.println("更新数据..."); 
my_hibernate = (Test)session.load(Test.class,"121"); 
my_hibernate.setXb("f"); 
System.out.println("提交Transaction..."); 
tx.commit();   
System.out.println("关闭Session..."); 
HibernateSessionFactory.closeSession(); 





http://chatgpt.dhexx.cn/article/CDStv78c.shtml

相关文章

Flask-session用法

首先还是先从概念入手&#xff0c;最近学习越学越来越觉得自己菜 Flask-session&#xff1a; 概念&#xff1a; session咱们都知道是基于cookjie实现的&#xff0c;保存在服务器的键值对&#xff0c;同时在浏览器的cookie中也会保存相同的随机字符串&#xff0c;用来再次请…

php $_session用法,php $_session用法是什么

php $_session用法&#xff1a;1、初始化session变量&#xff0c;代码为【session_start();】&#xff1b;2、session的写入、读取&#xff0c;代码为【$_SESSION[keyword] "php";】。 php $_session用法&#xff1a; 使用PHP应用session时&#xff0c;将session中的…

session的用法和详解

session的用法和详解 源地址&#xff1a;http://www.frontfree.net/view/article_742_page1.html 阅读本文章之前的准备  阅读本文章前&#xff0c;需要读者对以下知识有所了解。否则&#xff0c;阅读过程中会在相应的内容上遇到不同程度的问题。 懂得ASP/ASP.NET编程   了…

java中session的用法与原理

https://www.cnblogs.com/xdp-gacl/p/3855702.html session简介 在WEB开发中&#xff0c;服务器可以为每个用户浏览器创建一个会话对象&#xff08;session对象&#xff09;&#xff0c;注意&#xff1a;一个浏览器独占一个session对象(默认情况下)。因此&#xff0c;在需要保…

python二维表转一维表_Excel中如何将二维表转换成一维表

在办公过程中处理数据做报表时有时候需要我们将二维表转换为一维表&#xff0c;一维表与二维表最大的区别在于列字段中是否有相同性质的字段&#xff0c;有两个或两个以上相同性质字段的则是二维表&#xff0c;今天小编就教一下大家用Excel将二维表转换成一维表。 首先&#xf…

c++vector实现二维表

一、向量的介绍 向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。 在使用它时, 需要包含头文…

二维st表

摘要 我们知道一维的st表在经过预处理后可以在O(1)时间内查询任意区间的极值&#xff0c;虽然其是离线算法&#xff0c;但胜在代码短小易写。而在二维RMQ&#xff08;区间最值查询&#xff09;问题中&#xff0c;我们依然可以采用st算法解决问题&#xff0c;只不过我们需要从一…

【C#】读取txt、csv等二维表

程序要读文件&#xff0c;在实战中主要还是以二维表为主&#xff0c;类似下图这种&#xff1a; 基本上除了掌握《【C#】txt的读写》&#xff08;点击打开链接&#xff09;的文件流的读写&#xff0c;还需要与《【C#】利用正则表达式判断输入是否为纯数字、容器类》&#xff08;…

MySQL一维表变二维表_二维表转换一维表,三种方法一网打尽!

小伙伴们&#xff0c;早上好&#xff01;新的一天又开始了&#xff0c;学习的脚步不能停。 今天向大家分享二维表格转一维表的三种方法&#xff0c;分别用到函数、数据透视表和VBA代码。三种方法各有利弊&#xff0c;表亲可以自行选择。 如下图&#xff0c;A1:E5是数据源&#…

给二维表添加时间序列索引

一&#xff0c;读取数据 import pandas as pd open_dataspd.read_csv(./data328/open328.csv,headerNone) open_datas.head()(可以看到索引为数字) 二&#xff0c;创建时间序列 import pandas as pd open_dataspd.read_csv(./data328/open328.csv,headerNone) open_datas.h…

excel二维表转化为一维表

1、什么是二维表和一维表 二维表即表中有两个维度&#xff0c;纵向维度的哪列值唯一 一维表即只有列名一个维度 2、 添加工具并转换 我们需要添加【数据透视表和数据透视图向导】功能来完成&#xff0c;如果已经设置可以忽略这步 文件--选项--自定义功能区--不在功能区的命令…

Excel如何快速将一维表转为二维表

如下图左侧是某公司销售一维表&#xff0c;现在想要将其快速转换成右侧这种二维表。 选中姓名列所有数据区域&#xff0c;然后点击下图选项&#xff08;Excel工具箱&#xff0c;具体安装方法百度即可&#xff0c;本文不作过多叙述&#xff09; 选择【随机重复】&#xff0c;然后…

【Python】Pandas DataFrame 一维表二维表的转换

目录 一、stack & unstackunstack 将一维表转换为二维表stack 将二维表转换为一维表 二、pivot & meltpivot 将一维表转换为二维表melt将二维表转换为一维表 Tips 用pandas处理数据&#xff0c;我们经常获取到的是从数据库或者excel中获取的一维表。而常常需要重排&…

Excel:一维表和二维表 互转

一、一维表转二维表 数据源&#xff1a; 一份流水账式的值班表&#xff0c;为了便于打印张贴&#xff0c;现在需要使其变成这样的样式&#xff1a; 也就是从一维表变成传说中的二维表。 1、新建查询 依次单击【数据】→【新建查询】 →【从文件】→【从工作簿】 找到存放的工作…

mysql 二维表 查询_二维报表数据表设计

报表原型: 这里随便挑了一个二维报表 二维报表设计分析: 上面的报表原型行和列都有数据项,我们可以根据地理位置的经纬度定坐标点的思想来进行设计 这里使用列行来表示 c1r1表示第一列第一行 c1r2表示第一列第二行 ..... c2r1表示第二列第一行 c2r2表示第二 报表原型: 这里随便…

MySQL一维表变二维表_一维表转化为二维表,你会吗?

原标题&#xff1a;一维表转化为二维表&#xff0c;你会吗&#xff1f; 在产品的一些销售数据处理中&#xff0c;我们经常看到这样的一维表数据: 我们在进行数据的统计分析时&#xff0c;需要用这样的一维表作为数据源&#xff0c;所以正常情况下我们会用一维表的格式进行数据的…

python一维列表变二维列表_使用Python轻松应对一维表与二维表相互转换

数据分析时,同事经常给你一份二维表,是不是分分钟有想哭的冲动,一大堆的东西在一块,怎么透视?想要做进一步分析,也是特别麻烦。今天给你一种方便的方法。 一、入门版 先来看看可能要处理的文件是什么样的? 看看,别提多闹心了。当然我们不可能一开始就处理这么复杂的样…

Python实现一维表与二维表之间的相互转化

对已有数据表进行一维和二维之间的转化&#xff1a; import pandas as pd# 读入数据&#xff1a; df pd.read_excel(2dims.xls,Sheet1) df df的结构为&#xff1a; 如上图所示df是一个二维表。 # 将二维数据表转化为一维数据表&#xff1a; new_data df.set_index(地区) #…

java 二维表格_实现二维表

create or replace function getGoodsMsgForProtocol( str_in in varchar2,str_classId in varchar2)--分类字 return varchar2 is str_list varchar2(4000) default null;--连接后字符串 str_int number(2) default 0; begin for x in ( select goods.goodsname,goods.specs f…

二维表 转一维表 mysql_Excel二维表转换成一维表(2种方法)

今天大年初四&#xff0c;春节假期还剩三天了&#xff0c;每逢佳节胖三斤&#xff0c;亲们可要注意控制饮食了&#xff0c;要不然春节后无脸见人哟。闲话少说&#xff0c;今日分享如下。 在做数据处理的时候&#xff0c;有的时候为了处理方便我们需要将二维的数据表处理成一维的…