Hibernate的session是怎么创建的
发布网友
发布时间:2022-04-11 04:46
我来回答
共1个回答
热心网友
时间:2022-04-11 06:15
Hibernat
对数据库的操作是通过Session来实现的,这里的session不同于页面间传递参数的session,
而是类似于JDBC中的
Connection。Session是Hibernate运作的中心,对象的生命周期、事务的管理、数据库的存取都与session息息相关。
Session是由HibernateSessionFactory创建的,是线程安全的,可以让多个执行线程同时存取
HibernateSessionFactory而不会有数据共享的问题,但不能让多个线程共享一个Session。
SessionFactory对象的创建:
Java代码
Configuration
cfg
=
new
Configuration().configure();
SessionFactory
sessions
=
cfg.buildSessionFactory();
session创建时使用了一个ThreadLocal类来建立一个Session管理的辅助类,使用ThreadLocal可以有效隔离执行所用的数据,
避开了Session的多线程之间的数据共享问题。
//创建一个线程本地变量。
Java代码
public
static
final
ThreadLocal
threadlocal
=
new
ThreadLocal
();
public
static
org.hibernate.SessionFactory
sessionFactory;
//获取session的方法
public
static
Sessin
getSession()
throws
HibernateException{
//返回线程局部变量的当前线程的值
Session
s
=
(Session)threadLocal.get();
//如果sessionFactory为空,重新创建sessionFactory;如果线程为空,就打开一个新的session
if(session==null
||
!session.isOpen()){
if(sessionFactory
==
null){
rebuildSessionFactory();
session
=
(sessionFactory
!=
null)
sessionFactory.openSession():null;
//
将hibernate的session放入到线程中保存;只要这个线程不结束,都可以通过线程的get()方法来获取
threadLocal.set(session);return
session;
Hibernate的session是怎么创建的
Session是由HibernateSessionFactory创建的,是线程安全的,可以让多个执行线程同时存取 HibernateSessionFactory而不会有数据共享的问题,但不能让多个线程共享一个Session。SessionFactory对象的创建:Java代码 Configuration cfg = new Configuration().configure();SessionFactory sessions = cfg.buildSessionFactory...
[急]hibernate中的Session什么时候关闭?
一般的Hibernate程序中,Session由用户手动获取,手动关闭。正规项目中,在业务层获取Session Session session = HibernateSessionFactory.openSession();然后把此session传给dao层,将数据持久化或其他的操作。一次业务逻辑可能调用多个dao方法,例如银行转帐,是一个先减后增的过程,所以会调用2个dao里的方法(...
hibernate的工作流程是什么?
Hibernate的工作流程:1. 读取并解析配置文件 2. 读取并解析映射信息,创建SessionFactory 3. 打开Sesssion 4. 创建事务Transation 5. 持久化操作 6. 提交事务 7. 关闭Session 8. 关闭SesstionFactory Hibernate中bean 的三种状态 Hibernate对象分为三种状态:瞬时态(new 出来的...
Hibernate中Session什么意思?
HIBERNATE是 自然水公司SESSION 是从自然水公司到你家里的管道。要用水,你必须先造一个管道。如果延迟加载的话,记得把水龙头开着。
hibernate为什么要有session
hibernate能检测到这些持久对象的改变,并及时刷新数据库 (2) 每一个Session实例和一个数据库事务绑定 通常将每一个Session实例和一个数据处理库事务绑定 就是说,每执行一个数据库事务(操作),都应该先创建一个新的Session实例.如果事务执行中出现异常,应该撤消事务.不论事务执行成功与否,最后都应该调用...
请简述Hibernate工作原理?
Hibernate工作原理是Configuration读取Hibernate的配置文件和映射文件中的信息,即加载配置文件和映射文件,并通过Hibernate配置文件生成一个多线程的SessionFactory对象。然后,多线程SessionFactory对象生成一个线程Session 对象;Session对象生成Query对象或者Transaction对象;可通过Session对象的get(),load(),save()...
hibernate 怎么得到 sessionfactory
public class HibernateUtils { private static SessionFactory factory;static{ try{ //读取hibernate.cfg.xml文件 Configuration cfg=new Configuration().configure();//建立SessionFactory factory=cfg.buildSessionFactory();}catch(Exception e){ e.printStackTrace();} } //获得开启着的Session public...
Hibernate session的方法的一些说明
void flush() void clear()这两个方法通常在一起使用 由于Hibernate有缓存数据的功能 所以当我们要批量查询和批量插入时 会因为大量的缓存而导致内存溢出 所以我们可以在执行批量插入时插入一定数目的数据后调用flush()提交插入 然后调用clear()清空当前Hibernate session内的所有缓存 批量查询同理 Connection...
如何实现 hibernate 不需要托管到spring 可以实现写入
1.获得Configuration对象 2.创建SessionFactory 3.创建Session 4.打开事务 5.进行持久化操作。比如上面的添加用户操作 6.提交事务 7.发生异常,回滚事务 8.关闭事务 使用Hibernate进行访问持久层,每次都要进行这八个步骤。但是若使用Spring对Hibernate进行管理,又是怎么样的呢?首先,Spring对Hibernate提供了...
Hibernate的基本组件
Configuration接口负责配置并启动Hibernate 创建SessionFactory对象 在Hibernate的启动的过程中 Configuration类的实例首先定位映射文档位置 读取配置 然后创建SessionFactory对象 Transaction接口 Transaction接口负责事务相关的操作 它是可选的 开发人员也可以设计编写自己的底层事务处理代码 Query和Criteria接口 lishixinzhi...