强人Hibernate笔记 上中下

发布 2021-05-12 23:32:28 阅读 7828

hibernate文档笔记共分为三个部分,此处是第一部分,讲述了对象定义、实例状态、jmx集成和jca 支持四个部分的内容。

一、对象定义。

对于单个数据库,被编译的映射,是一个线程安全的缓冲区。是一个session和connectionprovider客户端的工厂。拥有可选的对过程级和集群级重复利用的数据的缓存(二级缓存)。

单线程、短生命周期的在应用程序和持久化存储系统之间的一个会话对象。封装了一个jdbc连接。是一个事务的工厂。

拥有强制的对持久化对象的缓存(一级缓存),当通过标识浏览对象之间关系和查找对象时使用。

objects and collections

包含执久化状态和业务功能的短生命周期的、单线程对象。可以是pojos,通常是和session(严格说,是单个session)相关联的对象。session一关闭,他们将和session分离,可以自由的使用在应用层的任何地方。

(也就是说,作为传输对象使用(transfer object)。)

and detached objects and collections

不和当前session关联的持久化类的实例。他们可以被应用程序在不持久化时实例化,也可以被关闭的session实例化。

(可选)应用程序用来指定一个原子操作的单线程、短生命周期的对象。低层jdbc、jta、corba事务的抽象程序。在相似的情况下,一个session可以同时横跨多个事务。

事务划分,既可以使用低层的apis,也可以使用transaction。

(可选)jdbc连接或jdbc连接池的工厂。低层datasource和drivermanager的抽象程序。

这个对象不暴露给应用程序,但是应用程序可以被开发者继承和实现。

(可选)transaction实例的工厂。这个对象不暴露给应用程序,但是应用程序可以被开发者继承和实现。

二、实例状态。

持久化对象根据持久化上下文的定义,可以有三种不同的状态。hibernate session对象是一个持久化上下文。

不关联任何的持久化上下文。没有持久化的标识(指主键值primary key value)。

和当前持久化上下文关联。他有一个持久化标识,多数情况,在数据库中有对应的行。对于特定的持久化上下文,hibernate保证持久化标识和j**a标识(内存中对象的位置)相同。

曾经和一个持久化上下文关联,持久化上下文关闭;或者对象在另一个进程中被序列化。他拥有持久化标识,多数情况,在数据库中有对应的行。对于分离对象hibernate不保证持久化标识和j**a标识的对应关系。

三、jmx集成。

jmx是j**a组件管理的jee标准。hibernate可以被jmx服务管理。在发行版本中,hibernate提供了一个mbean的实现,在jboss上,你使用jmx可以得到的好处:

management

hibernate session的生命周期可以自动的绑定到jta事务范围。这意味着,你不需要手动的打开关闭session,这成为jboss ejb***的要完成的工作。在你的**中,也不用担心事务的划分,当然除非你想要写一个轻便的持久化层,通过使用hibernate transaction apis。

你可以调用hibernatecontext来访问session。

deployment

通常使用jboss service deployment descriptor(在ear或sar文件中)发布hibernate jmx service,它支持hibernate sessionfactory所有的常用配置选项。无论如何,你还需要在deployment descriptor中描述所有的映射文件。如果你使用可选的har deployment,jboss将自动检测所有的映射文件在har文件中。

四、jca 支持。

hibernate也可以配置作为一个连接器。该功能是实践型功能。

以上四个方面的内容组是我的hibernate文档笔记的第一部分,想更多的了解,请关注其他两个部分。

hibernate文档笔记共分为三个部分,此处是第二部分,讲述了contextual sessions、configuration、获取sessionfactory和jdbc connections(session是对jdbc连接的封装)。

五、contextual sessions

许多应用程序需要一种和上下文有关联hibernate session,这样的session是指贯穿于给定环境的上下文中都有效的session。无论如何,贯穿于应用程序应用上下文由什么组成的清晰度不同,不同的上下文针对当前的概念有不同的范围。

使用hibernate 3.0以前版本的应用程序,趋于使用自已实现的基于threadlocal来维护前后关系的session、诸如hibernateutil的帮助类;或使用基于**或拦截机制的第三方的框架(spring或pico)。

从hibernate 3.0.1,hibernate加入了方法。

最初,假定使用jta事务定义了当前session的scope和context。hibernate团队维护时,给定了成熟的卓越的jta transactionmanager的实现方式,多数(但不是所有)应用程序应该使jta transaction management,不论它是否发布到一个jee容器中。基于这一点,基于用jta来维护上下文关系中的session应该是必须的。

无论如何,在hibernate 3.1,之后的处理,是可以被插拔的,也就是说可以session的范围和上下文。新扩展接口(和新的配置参数(被加入,允许插拔,也就是说可以定义session的范围和上下文。

细节可以查看的文档。它定义了一个currentsession()方法,负责跟踪与当前上下文相关联的session。hibernate提供了这个接口的三种实现方式。

当前session,通过jta事务跟踪和标识生命周期。这里的处理过程在处理方法上和老jta是相似的。

当前session,通过当前执行的线程来跟踪。

当前session,通过当前执行的线程来跟踪。你是负责绑定和解除当前session到执行线程通过使用这个类的静态方法。该类不会open、flush、close session。

前两个实现类,提供了“一个session对应一个数据库事务”的编程模式,也就是众所周知的“session-per-request”模式。hibernate session的开始和结束,是以数据库中事务的执行时间为依据的。如果你使用编程方式划分事务,用简单的jse需不是jta,你应该考虑使用hibernate事务apis来隐藏低层的事务**。

如果你使用的是jta,使用jta的接口来划分事务。如果你在一个支持cmt(container management transaction)的容器运行程序,事务是通过声明定义,在你程序中不需要任何的**来划分事务。

参数应该指定,一个的实现类。如果配置参数没有被设置,而是配置了一个被设置,hibernate将使用这里要考虑向后兼容。典型的情况下,这个参数是使用的类的名字。

对于hibernate提供的三个实现类,有对应的三个简短名,“jta”、“thread”、“managed”。

六、configuration

1.编程配置。

一个的实例表示一个应用程序的所有j**a类型到数据库类型的映射。是用来建造一个被编译的映射是来自所有的xml映射文件。

片断1:configurationcfg=newconfiguration().addresource(“

片断2:configurationcfg=newconfiguration().addclass(

片断3:configurationcfg=newconfiguration().setproperty(“

configuration可以接收的选项:

1)传递一个到。

Hibernate复习笔记

hibernate 复习笔记。的结构体系包括持久化类 实体层 映射文件 配置文件 a.持久化类 实体层 每个对象映射一张表每个对象中的属性映射该表的属性。b.映射文件提供映射路径 即 a对象中c属性映射 a表中 c字段 并可设置表与表之间的映射关系。c.配置文件设置数据库连接信息并包含映射文件路径 ...

oracle笔记上午

create table student 注释创建一个名字叫student的表。stu id int,学生编号。stu name varchar 20 学生姓名。stu password varchar 20 学生的密码。stu address varchar 50 学生的家庭住址。stu sex ...

实验心理学笔记上

实验心理学的由来。产生于1879年 性人物 费希纳 冯特 艾宾浩斯。第1节科学方法的两个标志 经验观察 自我校正。1经验观察的角度 实验心理学要达到科学方法的标准,就必须发展出一套有效且稳定的观察方法,其观察结果必须尽可能地避免各种其他因素的影响。必须回答 观察什么 和 怎样观察 这两大课题。2 自...