现在我们可以在 IDEA 下新建一个 Hibernate 项目,接着上次内容这次主要总结一下 Hibernate 的 Session,及其核心方法。


Session

概述

  • Session 接口是 Hibernate 向应用程序提供的操纵数据库的主要接口,提供了基本的保存、更新、删除和加载 java 对象的方法
  • Session 具有一个缓存,位于缓存中的对象称为持久化对象,和数据库中的相关记录对应
  • Hibernate 将对象分为 4 种状态,持久化状态,临时状态,游离状态,删除状态,Session 特定的方法可以使对象从一个状态到另一个状态。

Session 缓存

  • Session 接口实现中包含一系列 java 集合,这些 java 集合构成了 Session 缓存,只要 Session 实例没有结束生命周期,且没有清理缓存,则存放在他缓存中的对象也不会结束生命周期
  • Session 缓存可以减少 Hibernate 访问数据库的频率

操作 Session 缓存

  • reflush(): 会强制发送sql查询(select)语句,使缓存中的数据和数据库中的数据保持一致,数据由数据库到缓存
  • flush(): 会强制发送sql更新(update)语句,使数据库中的数据和缓存中的数据保持一致,数据由缓存到数据库
  • 当程序执行 Transaction 的 commit() 方法时,该方法会先 flush(),然后再提交事务

持久化对象的状态

  • 临时对象

    • ID 通常为 null
    • 不处于 Session 的缓存中
    • 在数据库中没有对应的记录
  • 持久化对象
    • ID 不为 null
    • 位于 Session 缓存中
    • 持久化对象和数据库中相关记录对应
    • Session 在 flush 缓存时,会根据持久化对象的属性变化,来同步更新数据库
    • 同一个 Session 实例的缓存中,数据库表的每条记录对应唯一的持久化对象
  • 删除对象
    • 数据库中没有其 ID 对应的记录
    • 不再处于 Session 缓存中
    • 一般情况下应用程序不再使用该对象
  • 游离对象
    • ID 不为 null
    • 不再处于 Session 缓存中
    • 游离对象一般由持久化对象转换而来,因为数据库中可能会存在对应的对象

Session 方法

  • save() & persist()

    • save() 和 persist() 方法可以使得一个临时对象转变为持久化对象
    • 执行 save() 和 persist() 方法将会在 flush 缓存的时候执行一条 insert 语句
  • get() & load()
    • 都是从根据 id 从数据库中加载一个持久化对象,当数据库中没有对应 id 的对象,get() 方法返回 null,load() 方法抛出一个异常
    • load() 有延迟加载策略,即执行方法后返回一个代理对象,直到用到该对象的时候才会持久化,若关闭了 session,那么就会发生懒加载异常
  • update()
    • update() 方法使一个游离对象转变为持久化对象, 并且计划执行一条update 语句.
    • 当 update() 方法关联一个游离对象时, 如果在 Session 的缓存中已经存在相同 OID 的持久化对象, 会抛出异常
  • delete()
    • delete() 方法既可以删除一个游离对象,也可以删除一个持久化对象

Hibernate Session总结的更多相关文章

  1. org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

    org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not a ...

  2. Use Spring transaction to simplify Hibernate session management

    Spring对Hibernate有很好的支持    DataSource ->SessionFactory-> HibernateTranscationManagerHibernate中通 ...

  3. Could not open Hibernate Session for transaction;

    javax.servlet.ServletException: org.springframework.transaction.CannotCreateTransactionException: Co ...

  4. Hibernate3回顾-5-简单介绍Hibernate session对数据的增删改查

    5. Hibernate对数据的增删改查 5.1Hibernate加载数据 两种:get().load() 一. Session.get(Class arg0, Serializable arg1)方 ...

  5. [转]Hibernate Session各种状态转换方法分析

    摘自http://spiritfrog.iteye.com/blog/221177 我的印象里, Hibernate session中常用的保存操作只有:save, update, saveOrUpd ...

  6. spring事务管理出错。No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy ...

  7. [原理][源代码解析]spring中@Transactional,Propagation.SUPPORTS,以及 Hibernate Session,以及jdbc Connection关系---转载

    问题: 一. 1. Spring 如何处理propagation=Propagation.SUPPORTS? 2. Spring 何时生成HibernateSession ? 3. propagati ...

  8. No Hibernate Session bound to thread, and configuration does not allow creat

    No Hibernate Session bound to thread, and configuration does not allow creat 今天遇到这么一个错误,在网上差了很多都没有能解 ...

  9. Hibernate Session 获取connection

    Hibernate Session 获取connection 由于最近一个项目要用到一条辅助的SQL ,hibernate里面的SQLQuery API 总的SQL语句不能包含 : 冒号, 固放弃Hi ...

  10. hibernate.Session简介

    ★→→SessionFactory (org.hibernate.SessionFactory) 包含已经编译的映射(mappings),是制造session的工厂,可能含有一些可以在各个事务(tra ...

随机推荐

  1. Ionic APP-Web SPA开发进阶(二)Ionic进阶之路由去哪了

    Ionic进阶之路由去哪了 项目需求 在查看药品时,从药品列表中可以通过点击药品列表获取某一药品详情.提交订单时,同样可以查看药品详情.两种情形下,从药品详情返回后,应分别返回至原来的页面.如下图所示 ...

  2. [案例]某体育用品公司在零售领域BI的产品应用解决方案

    随着某体育用品公司集团经营规模的不断扩大,信息化的建设也在不断的深入,从POS系统到ERP系统,从MAIL系统到OA系统,整个集团的每项工作都与信息系统密不可分,可以说是行业内信息化建设的先导者.但是 ...

  3. ceres-solver库编译说明

    0.            ceres-solver简介 Ceres Solver是一个C++环境下的非线性最小二乘问题的求解工具包,可用来建模并解决大型复杂的非线性最小二乘问题.这个工具包已经广泛被 ...

  4. Unity3D学习笔记(五)C#与JavaScript组件访问的比较

    由于之前用JavaScript用的比较多,因此总是想用以前的方法来访问组件,却屡遭失败,经过查阅资料发现,二者存在较大的不同. 下面以调用3D Text组件HurtValue为例,来比较二者的不同 J ...

  5. C语言中数组转化为字符串的方法

    #include<stdio.h> #include <stdlib.h> #include <string.h> #define NR(x) (sizeof(x) ...

  6. Android服务器——使用TomCat实现软件的版本检测,升级,以及下载更新进度!

    Android服务器--使用TomCat实现软件的版本检测,升级,以及下载更新进度! 算下来,TomCat服务器已经写了很长一段时间了,一直说拿他来搞点事 情,也一直没做,今天刚好有空,交流群还有人请 ...

  7. OpenGL OpenCV根据视差图重建三维信息

    代码如下: // disparity_to_3d_reconstruction.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" //Huan ...

  8. sieve的objective-c实现

    用obj-cl来实现前面的sieve代码貌似"丑"了不少,应该有更好的方式:比如不用Foundation或不用NSArray类,而改用其它更"底层"的类. 先把 ...

  9. ubuntu12.04:Mysql数据库:自动安装

    打开终端,输入下面命令: 1 sudo apt-get install mysql-server 2 sudo apt-get install mysql-client 一旦安装完成,MySQL 服务 ...

  10. [ Java学习基础 ] Java的对象容器 -- 集合

    当你有很多书时,你会考虑买一个书柜,将你的书分门别类摆放进入.使用了书柜不仅仅使房间变得整洁,也便于以后使用书时方便查找.在计算机中管理对象亦是如此,当获得多个对象后,也需要一个容器将它们管理起来,这 ...