马士兵hibernate文档 (个人完善版)
强人Hibernate文档笔记(上中下)

强人Hibernate文档笔记(上)Hibernate文档笔记共分为三个部分,此处是第一部分,讲述了对象定义、实例状态、JMX 集成和JCA 支持四个部分的内容。
一、对象定义.hibernate.SessionFactory对于单个数据库,被编译的映射,是一个线程安全的缓冲区。
是一个Session和ConnectionProvider客户端的工厂。
拥有可选的对过程级和集群级重复利用的数据的缓存(二级缓存)。
.hibernate.Session单线程、短生命周期的在应用程序和持久化存储系统之间的一个会话对象。
封装了一个JDBC连接。
是一个事务的工厂。
拥有强制的对持久化对象的缓存(一级缓存),当通过标识浏览对象之间关系和查找对象时使用。
3.Persistent objects and collections包含执久化状态和业务功能的短生命周期的、单线程对象。
可以是POJOs,通常是和Session(严格说,是单个Session)相关联的对象。
Session一关闭,他们将和Session 分离,可以自由的使用在应用层的任何地方。
(也就是说,作为传输对象使用(Transfer Object)。
)4.Transient and detached objects and collections不和当前Session关联的持久化类的实例。
他们可以被应用程序在不持久化时实例化,也可以被关闭的Session实例化。
.hibernate.Transaction (可选)应用程序用来指定一个原子操作的单线程、短生命周期的对象。
低层JDBC、JTA、CORBA 事务的抽象程序。
在相似的情况下,一个Session可以同时横跨多个事务。
事务划分,既可以使用低层的APIs,也可以使用Transaction。
.hibernate.connection.ConnectionProvider (可选)JDBC连接或JDBC连接池的工厂。
马士兵_J2SE_第二章_基础语法_个人学习笔记

第二章基础语法1. 成员变量:类体内方法体外声明的变量 局部变量:方法体内声明的变量 重要:变量出了它所在的大括号就不起作用了,反之只要是在它的大括号内任何地方都起作用。
TestConvert.javapublic class TestConvert {public static void main(String arg[]) {int i1 = 123;int i2 = 456;double d1 = (i1+i2)*1.2;//系统将转换为double型运算float f1 = (float)((i1+i2)*1.2);//需要加强制转换符byte b1 = 67;byte b2 = 89;byte b3 = (byte)(b1+b2);//系统将转换为int型运算,需//要强制转换符System.out.println(b3);//结果:-100double d2 = 1e200;float f2 = (float)d2;//会产生溢出System.out.println(f2);//infinity(无限)float f3 = 1.23f;//必须加flong l1 = 123;long l2 = 30000000000L;//必须加lfloat f = l1+l2+f3;//系统将转换为float型计算long l = (long)f;//强制转换会舍去小数部分(不是四舍五入)}}TestConvert2public class TestConvert2 {public static void main(String[] args) {int i=1,j=12;float f1=(float)0.1; //0.1ffloat f2=123;long l1 = 12345678,l2=8888888888L;double d1 = 2e20,d2=124;byte b1 = 1,b2 = 2,b3 = 127;j = j+10;i = i/10;i = (int)(i*0.1);char c1='a',c2=125;byte b = (byte)(b1-b2);char c = (char)(c1+c2-1);float f3 = f1+f2;float f4 = (float)(f1+f2*0.1);double d = d1*i+j;float f = (float)(d1*5+d2);}}Fab.javapublic class Fab {public static void main(String[] args) {System.out.println(f(-9));}public static long f(int index) {if(index < 1) {System.out.println("invalid parameter!");return -1;}if(index == 1 || index == 2) {return 1;}long f1 = 1L;long f2 = 1L;long f = 0;for(int i=0; i<index-2; i++) {f = f1 + f2;f1 = f2;f2 = f;}return f;}}。
超级全马士兵hibernate学习笔记(WORD整理版)

课程内容 (5)1 HelloWorld (5)2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么要有O/R Mapping (5)3 常见的0/R框架(了解) (5)4 hibernate基础配置(重点) (5)5 ID生成策略(重点 AUTO) (5)6 Hibernate核心开发接口介绍(重点) (5)7 对象的三种状态(了解) (5)8 关系映射(重点) (5)9 Hibernate査询(HQL) (5)10 在Struts基础上继续完善BBS200 (5)11 性能优化(重点) (5)12 补充话题 (5)风格 (5)1 先脉络,后细节 (5)2 先操作,后原理 (5)3 重Annotation,轻xml配置文件 (5)资源 (5)1 http://www. (5)2 hibernate zh_CN文档 (5)3 hibernate annotation references (5)环境准备 (5)1 下载hibernate-distribution-3.3.2.GA-dist (5)2 下载hibernate-annotations-3[1].4.0.GA (5)3 注意阅读hibernate compatibility matrix(hibernate 网站download) (5)4 下载slf4jl.5.8 (6)Hibernate HelloWorld (6)1 建立新java 项目,名为hibernate_0100_HelloWorld (6)2 学习建User-library-hibernate,并加入相应的jar包 (6)3 引入mysql的JDBC驱动包 (6)4 在mysql中建立对应的数据库以及表 (6)5 建立hibernate 配置文件hibernate.cfg.xml (6)6 建立Student 类 (6)7 建立Student 映射文件 Student.hbm.xml (6)8 将映射文件加入到hibernate.cfg.xml中 (6)9 写测试类Main,在Main中对Student对象进行直接的存储测试 (6)10 FAQ: (6)11 Note: (6)12 建立能力 (7)建立 Annotation 版本的 HelloWorld (7)1 创建teacher 表,create table teacher (id int primary key, name varhcar(20), title varchar(lO)); (7)2 创建Teacher 类 (7)3 在hibernate lib 中加入annotation的jar包 (7)4 参考Annotaion文档建立对应的注解 (7)5 在hibernate.cfg.xml中建立映射<mapping class:.../〉 .. (7)6 参考文裆进行测试(注意文裆中缺少configure()的小bug) (7)7 FAQ: @不给提示 (7)What is and Why 0/R Mapping (7)1 JDBC操作数据库很繁琐 (7)2 Sql语句编写并不是面向对象的 (7)3 可以在对象和关系表之间建立关联来简化编程 (7)4 0/R Mapping 简化编程 (7)5 0/R Mapping跨越数据库平台 (7)6 Hibernate_0200_OR_Mapping_Simulation (7)0/R Mapping Frameworks (7)1 hibernate (7)2 toplink (8)3 jdo (8)4 JPA (8)Hibernate基础配置 (8)1 对应项目:Hibernate_0300_BasicConfiguration (8)2 介绍MSQL的图形化客户端 (8)3 hibernate.cfg.xml: hbni2ddl.auto (8)4 搭建日志环境并配置显示DDL语句 (8)5 搭建jUnit环境 (8)6 hibernate.cfg.xml:show_sql (8)7 hibernate.cfg.xml:format_sql (8)8 表名和类名不同,对表名进行配置 (8)9 字段名和属性相同 (8)10 字段名和属性名不同 (8)11 不需要psersistence的字段(不用列) (8)12 映射日期与时间类型,指定时间精度 (8)13 映射枚举类型( 比较少用) (9)14 字段映射的位置(field或者get方法) (9)15 @Lob (9)16 课外:CLOBBLOB类型的数据存取 (9)17 课外:Hibernate自定义数据类型 (9)18 hibernate 类型 (9)ID生成策略 (9)1 对应项目:hibernate_0400_ID (9)2 注意: (9)3 xml生成id (9)4 注解方式:@GeneratedValue (9)5 FAQ; (10)6 联合主键 (10)核心幵发接口介绍 (12)1 hibernate_0500_CoreAPI (12)2 Hibernate API文档需要单独下载 (12)3 Configuration (12)4 SessoinFactor (12)5 Session (12)6 SchemaExport (自动建表) (13)7 Query 接口 (13)8 Note: (13)三种对象状态 (14)1 上一个 project (14)2 三种状态的区分关键在于 (14)3 三种状态: (14)4 对这三种状态需要关注的问题是在该状态下如果进行数据库的操作会发生什么结果,比如改变属性的 (14)关系映射(重要) (15)对象之间的关系 (15)1 这里的关系映射指的是对象之间的关系,并不是指数据库的关系,本章解决的问题是当对象之间处于 (15)2 简化问题: (15)3 —对一 (15)4 —对多 (15)5 组件映射 (15)一对一关联 (16)1 一对一单向外键关联 (16)2 一对一双向外键关联 (16)3 一对一单向主键关联(不重要) (17)4 一对一双向主键关联(不重要) (17)5 联合主键 (17)组件映射 (17)1 项目:hibernate_1100_component (17)2 对象关系:一个对象是另外一个对象的一部分 (17)3 数据库表:一张表 (17)4 annotation: @ Embeddable @Embbeded (17)5 xml: 使用<component,例如: (18)多对一与一对多 (18)1 多对一单向关联 (18)2 一对多单向关联 (19)3 一对多(多对一)双向关联 (19)多对多 (20)1 单向关联: (20)2 双向关联: (21)关联关系中的CRUD_Cascade_Fetch (21)1 hibernate_1700_one2many_many2one_bi_crud (21)2 设定cascade以设定在持久化时对于关联对象的操作(CUD,R归Fetch管) (21)3 cascade仅仅是帮我们省了编程的麻烦而已,不要把它的作用看的太大 (21)4 铁律:双向关系在程序中要设定双向关联 (22)5 铁律:双向mappedBy (22)6 fetch (22)7 Update时@ManyToOne()中的cascade参数关系 (22)8 Delete时@ManyToOne()中的cascade关系 (22)9 O/RMapping 编程模型 (23)10 要想删除或者更新先做load,除了精确知道ID之外 (23)11 如果想消除关联关系,先设定关系为null.再删除对应记录,如果不删记录,该记录变成垃圾数据 (23)12 练习:多对多的CRUD (23)关系映射总结 (24)1 什么样的关系,设计什么样的表,进行什么样的映射 (24)2 CRUD,按照自然的理解即可(动手测试) (24)集合映射(不太重要) (24)1 项目名称:hibernate_1800_Collections_Mapping (24)2 Set (24)3 List (与Set差不多多个@OrderBy) (24)4 Map (24)继承映射(不太重要) (24)1 三种方式 (24)作业: (24)1 学生课程、分数的设计(重要) (24)2 设计: (25)3 树状结构的设计(至关重要) (25)Hibernate 查询(Query Language) (26)HQL vs EJBQL (26)1 NativeSQL >HQL.> EJBQL(JPQL 1.0) > QBC(Query By Criteria) > QBE(Query By Example)" 262 总结:QL应该和导航关系结合,共同为査询提供服务。
马士兵java基础笔记 pdf版 面向对象部分

public class Test{ public static void main(String args[]){ Test test = new Test(); int date = 9; BirthDate d1= new BirthDate(7,7,1970); BirthDate d2= new BirthDate(1,1,2000)(1); test.change1(date)(4); test.change2(d1);(7) test.change3(d2);
b.setDay(22),把 b 指向的值改变了,这次真 的变了!
方法执行完后,b 消失,d2 的值变了。
四. 方法重载 类中可以定义相同名字但参数不同的方法。
五. this 关键字 this 指向对象自身的引用。
在类的方法定义中使用 this 关键字代表使用该方法的对象的引用。 当必须指出当前使用方法的对象是谁时要使用 this 有时使用 this 可以处理方法中成员变量和参数重名的情况 this 可以看作是一个变量,它的值是当前对象的引用
_id:1
age = _age; }
_age:25
public static void main(String[] args) {
Person tom = new Person(1, 25); } }
tom:XXX Stack
id:1 age:25
Heap
例子:
class BirthDate { private int day; private int month; private int year; public BirthDate(int d, int m, int y) { //构造方法 day = d; month = m; year = y; }
Hibernate笔记完整版

day1一. hibernate数据持久化组件对象持久化(Object Persistence):把数据保存在永久存储介质中(数据库)1.为什么要持久化:a.内存是暂时存储设备,断电后数据易丢失b.网络传输无法传输内存中的对象,需要将对象外化c.内存中数据查询,组织不方便d.内存只能存储少量数据2.怎样持久化a.对象序列化 --> 二进制流合并存储,粒度大,无规律不支持检索只适合少数个别对象的序列化b.用JDBC/EJB/ORM 将数据存入数据库用JDBC:(Java DB Connection)优点:底层开发,控制力强(细); 效率最高; 标准的(SQL)JDBC,有可移植性缺点:过于复杂; 代码量大; 可维护性差(代码重用性低);用EJB:(Entity Java Bean)优点:直接自动生成JDBC代码; 持久对象(PO)的状态由服务器管理; 声明式的事务缺点:功能不全(特殊的组件,不能做继承关系); EJB容器是侵入性容器,失去OO的优点; 调试更复杂用ORM:(object relation mapping)对象关系映射优点:自动生成JDBC(代码量下降); 使用(plain oldest java object---pojo),非侵入型; 提供状态管理; 难度下降,不需要容器缺点:由于开源, 文档少; bug多; 技术支持差结论: 用java开发-->必须将数据持久化-->用数据库持久化-->须用ORM-->需要用Hibernate二. Hibernate1.POJO类plain oldest java object,就是标准的Java Bean。
2.HibernateHibernate -->一个可以自动的根据xml完成对象关系映射,并持久化到数据库的开源组件。
其底层也是由JDBC实现的。
hibernate是通过xml文件的配置,对数据库的底层的方言,以及数据库连接所需的信息,以及连接数据库的驱动。
Hibernate文档

Hibernate开源O/R映射框架表示层业务层持久层数据库不适合批量操作数据不适合使用数据库的特定功能Hibernate的定义Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级得对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JA V A EE架构中取代CMP,完成数据持久化的重任。
Hibernate的核心接口Hibernate的核心接口共有5个,分别为:SessionFactory、Session、Transaction、Query和Configuration。
通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。
SessionFactory接口SessionFactory接口负责初始化Hibernate。
它充当数据存储源的代理,并负责创建Session 对象。
这里用到了工厂模式。
需要注意的是,SessionFactory并不是轻量级得,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
Session接口Session接口负责执行被持久化的CRUD操作,但需要注意的是Session对象是非线程安全的。
Transaction接口Transaction接口负责事务相关的操作。
Query和Criteria接口Query和Criteria接口负责执行各种数据库查询。
它可以使用HQL语言或SQL语言两种表达方式。
Configuration接口Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。
在Hibernate的启动过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory 对象。
hibernate官方文档

第一篇:官方文档的处理方法,摘自官方在迁移原先用JDBC/SQL实现的系统,难免需要采用hibernat native sql支持。
1.使用SQLQueryhibernate对原生SQL查询执行的控制是通过SQLQuery接口进行的.1Session.createSQLQuery();1.1标量查询最基本的SQL查询就是获得一个标量(数值)的列表。
1sess.createSQLQuery("SELECT * FROM CATS").list();2sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").list();将返回一个Object数组(Object[])组成的List,数组每个元素都是CATS表的一个字段值。
Hibernate会使用ResultSetMetadata来判定返回的标量值的实际顺序和类型。
如果要避免过多的使用ResultSetMetadata,或者只是为了更加明确的指名返回值,可以使用addScalar()。
1sess.createSQLQuery("SELECT * FROM CATS")2 .addScalar("ID", Hibernate.LONG)3 .addScalar("NAME", Hibernate.STRING)4 .addScalar("BIRTHDATE", Hibernate.DATE)这个查询指定了:SQL查询字符串,要返回的字段和类型.它仍然会返回Object数组,但是此时不再使用ResultSetMetdata,而是明确的将ID,NAME和BIRTHDATE 按照Long, String和Short类型从resultset中取出。
同时,也指明了就算query 是使用*来查询的,可能获得超过列出的这三个字段,也仅仅会返回这三个字段。
Hibernate5用户手册中文版

5.1.6. 用户自定义的连接......................................................................45 5.1.7. ConnectionProvider 事务设置...............................................45 5.2. 数据库 Dialect(方言)...........................................................................45 第 6 章 事务与并发控制..................................................................................48 6.1. 物理事务..................................................................................................49 6.1.1. JTA 配置.......................................................................................50 6.2. Hibernate 事务 API................................................................................51 6.3. 事务模式(与反模式)..........................................................................55 6.3.1. Session-per-operation(每操作一个会话)反模式............55 6.3.2. Session-per-request(每请求一个会话)模式....................56 6.3.3. Conversations(对话)............................................................57 6.3.4. Session-per-application (每应用一个会话)..................58 6.4. 常见问题................................................................................................58 第 7 章 JNDI....................................................................................................59 第8章 锁..........................................................................................................59 8.1. 乐观锁......................................................................................................60 8.1.1. 指定版本号..................................................................................61 8.1.2. Timestamp(时间戳)................................................................63 8.2. 悲观锁......................................................................................................64 8.2.1. LockMode 类............................................................................. 65 第 9 章 Fetching(抓取)..............................................................................66 9.1. 基础..........................................................................................................66 9.2. 应用抓取策略..........................................................................................68 9.2.1. 不抓取..........................................................................................69 9.2.2. 通过查询动态抓取......................................................................70 9.2.3. 通过配置文件动态抓取..............................................................71 第 10 章 批处理..................................................................................................72 10.1. JDBC 批处理...........................................................................................72 第 11 章 缓冲..................................................................................................73 11.1. 配置二级缓存........................................................................................73 11.1.1. RegionFactory(注册工厂)..................................................73 11.1.2. 缓冲行为....................................................................................74 11.2. 管理缓冲数据........................................................................................75
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.hibernate.hbm2ddl.auto :在SessionFactory 创建时,自动检查数据库结构,或者将数据库schema 的DDL 导出到数据库。
使用create-drop 时,在显式关闭SessionFactory 时,将删除掉数据库schema。
例如:validate | update | create | create-dropcreate :如果没有表就创建update :如果表结构更新,就更新validate :每次插入表的时候看看表结构有没有更新。
理论上是先建类后建表:这个时候只要你的类建好了,可以跨数据库。
实际中先建表比先建类多,建好表以后要对数据库进行优化,比如建索引,建试图,各种各样的优化。
project\etc目录下面有很多示例性的文档,log4j的文档就在那个下面。
SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); SessionFactory的建立是很耗费时间的,应该像连接池一样,只建立一次,以后要用就直接从那用。
Hibernate文档建议我们自己写一个辅助类,用单例来做。
JUnit的一个bug:@BeforeClasspublic static void beforeClass() {sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();}在这句话的时候配置文件如果有的时候写错了,她悄悄把错误隐藏起来了。
解决的方法:可以对这句话加try catch块8.表名和类名不一致的时候:@Entity@Table(name="_teacher")public class Teacher {10字段名和属性名不一致的时候@Column(name="_name")public String getName() {return name;}11 不需要的字段的设置@Transientpublic String getYourWifeName() {return yourWifeName;}12 映射指定的时间日期@Temporal(TemporalType.TIME)public Date getBirthDate() {return birthDate;}在注解里面如果一个注解的属性名字叫value,你可以不写,直接写后面的值,如@Temporal(value=“TemporalType.TIME”)可写成上面的那样。
如果不写会把时间日期都放到表里面指定时间时默认TemporalType.TIMESTAMP还有time 和date 不过最常用的还是默认的。
13注意映射枚举类型用habernate xml的方式很麻烦在设定枚举时:以字符串方式显示:EnumType.STRING 以数字书序显示:EnumType.ORDINAL@Enumerated(EnumType.STRING)public Gender getGender() {return gender;}自增Mysql autoincreatment Oracle sequence如果将来的程序想跨数据库平台选native或uuid@GenerateValue注意是javax.persistence里的value,默认的是nativeincrement(很少用)用于为long, short 或者int 类型生成唯一标识。
只有在没有其他进程往同一张表中插入数据时才能使用。
在集群下不要使用。
identity(用得较多)对DB2,MySQL,MS SQL Server,Sybase 和HypersonicSQL 的内置标识字段提供支持。
返回的标识符是long,short 或者int 类型的。
sequence(用得较多)在DB2,PostgreSQL,Oracle,SAP DB,McKoi 中使用序列(sequence),而在Interbase 中使用生成器(generator)。
返回的标识符是long,short 或者int 类型的。
hilo使用一个高/低位算法高效的生成long,short 或者int 类型的标识符。
给定一个表和字段(默认分别是hibernate_unique_key 和next_hi)作为高位值的来源。
高/低位算法生成的标识符只在一个特定的数据库中是唯一的。
uuid用一个128-bit 的UUID 算法生成字符串类型的标识符,这在一个网络中是唯一的(使用了IP 地址)。
UUID 被编码为一个32 位16 进制数字的字符串。
guid在MS SQL Server 和MySQL 中使用数据库生成的GUID 字符串。
Native(用得较多)根据底层数据库的能力选择identity、sequence 或者hilo 中的一个。
在Oracle里面表名不能以下划线开头@Id@GeneratedValue (默认的是auto相当于native,在jpa1.0中,只有四种ID生成策略,下面的b、c、d、e)这种方式虽然是跨平台的,但是由于各种数据库生成数据的方式不同,生成的数据会有所不同。
如果要在跨平台的数据库中生成的方式也相同,可以采用e。
但极少会出现跨数据库平台的情况。
用auto的方式在Oracle中sequence生成策略只能起名hibernate sequence,不能起别的名字。
跨数据库平台的情况:自己写了一个给别人用的类库,这个类库可以跨平台。
public int getId() {return id;}@Id@GeneratedValue(strategy=GenerationType.TABLE, generator="Teacher_GEN")这里也可指定生成别的方式。
GenerationType可以在javaee文档里面找public int getId() {return id;}在Oracle中生成方式如果是sequence,可以指定一个sequence的名字。
@SequenceGenerator(name="teacherSEQ", sequenceName="teacherSEQ_DB")public class Teacher {@Id@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="teacherSEQ")public int getId() {return id;}6、设计数据库的时候建立主键,能用一个字段就尽量用一个字段,不要用多个字段。
但是不可避免,有些数据库表别人已经设计好了,有两个字段作为主键,这时可以在hibernate中使用联合主键。
在程序中用到面向对象的思想,要建立一个主键类,并对该类实现serializable接口。
实现序列化的原因:出现这种情况:系统实现集群,很多台服务器对外服务,一台服务器当机了,正好有一部分属性在那边;另一种情况:如果内存满了,会用到虚拟内存(把硬盘上的一部分空间作为内存),有部分内容就要存到硬盘上去了。
重写equals和hashcode的原因:主键要保证唯一性,不仅在数据库中要保证,一系列的对象要放在内存中,也要有所区分。
所以一定要重写equals 和hashcode,而且逻辑不能乱写,不能用父类中的equals和hashcode。
要对比是否相同,首先要查hash表的hashcode,再与hashcode相同的对比。
public class StudentPK implements java.io.Serializable{private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}@Overridepublic boolean equals(Object o) {if(o instanceof StudentPK) {StudentPK pk = (StudentPK)o;if(this.id == pk.getId() && .equals(pk.getName())) {return true;}}return false;}@Overridepublic int hashCode() {return .hashCode();}}getCurrentSession 和openSession 得到的不是同一个类,所以这两种方式不能混用。
有两种事物,一种是指针对数据库本身的不能处理分布式的事物.另外一种是JTA事物,能处理分布式的。
<property name="current_session_context_class">thread</property> tomcat不能使用这种:因为它没有相关的实现<property name="current_session_context_class">jta</property>public void testClear() {Session session = sessionFactory.getCurrentSession();session.beginTransaction();Teacher t = (Teacher)session.load(Teacher.class, 1);System.out.println(t.getName());session.clear();Teacher t2 = (Teacher)session.load(Teacher.class, 1);System.out.println(t2.getName());//如果没有clear,数据库里面就只有一条更新语句session.getTransaction().commit();}public void testFlush() {Session session = sessionFactory.getCurrentSession();session.beginTransaction();Teacher t = (Teacher)session.load(Teacher.class, 1);t.setName("tttt");session.flush();t.setName("ttttt");//如果没有flush,数据库里面就只有一条更新语句,如果用clear,就变成了transitant状态,就不发语句了。