持久化类

  • 格式:doc
  • 大小:31.00 KB
  • 文档页数:4

持久化类

持久化类:在应用程序中,用来实现业务问题实体的类(如,在电子商务应用程序中的Customer和Order)就是持久化类。不能认为所有的持久化类的实例都是持久的状态——一个实例的状态也可能是瞬时的或托管的。就如同它的名字暗示的,它的实例会被持久性保存于数据库中。

定义

持久化是将程序数据在持久状态和瞬时状态间转换的机制。持久化类(persistent class):可以被hibernate保存到数据库,并且从数据库读取的类。

性质

1、持久化类:是指其实例需要被Hibernate持久化到数据库中的类。持久化类符合JavaBean的规范,包含一些属性,以及与之对应的getXXX()和setXXX()方法。

注:

(1)get/set方法必须符合特定的命名规则,get和set后面紧跟属性的名字,并且属性名的首字母为大写。

(2)name属性的get方法为getName(),如果写成getname()或getNAME()会导致Hibernate在运行时抛出以下异常:

2、如果持久化类的属性为boolean类型,那么他的get方法名即可以用get作为前缀,也可以用is作为前缀。

3、持久化类有一个id属性,用来唯一标识Account类的每一个对象。这个id属性被称为对象标示符(OID,Object Identifier),通常它都用整数表示。

4、Hibernate要求持久化类必须提供一个不带参的默认构造方法,在程序运行时,Hibernate运用Java反射机制,调用ng.raflect.Constructor.newInstance()方法来构造持久化类的实例。

应用:把持久化类映射到表

1、Account.hbm.xml文件用于映射Account类,如果需要映射多个持久化类,有两种方法 :

(1)在同一个映射文件中映射所有类;

(2)为每一个类创建单独的映射文件,映射文件最好和类同名,扩展名为hbm.xml(推

荐使用,这有利于在团队开发中维护和管理映射文件) ;

2、映射文件的分析:

(1)

package:映射类所在的包,注意:包中间用"."隔开

(2)

元素指定类和表的映射

name:设定类名 table:设定表名

注:如果没写tableHibernate直接以类名作为表名。

(3)

1)子元素设定持久化类的OID和表的主键的映射,元素只有一个子元素。

2>适用于只有单个Hibernate应用程序访问同一个DB的场合。

3>OID必须为long、int或short类型,定义为byte类型,在运行时会抛异常。

b)identity:由底层DB来负责生成,要求底层DB把主键定义为自增类型,例如在SQL

Server中,应该把主键定义为identity类型,MySQL中,定义为auto_increment类型。

适用范围:

1>由于identity生成机制依赖于底层DB系统,要求底层DB必须支持自增字段类型。

2>OID必须为long、int或short类型,定义为byte类型,在运行时会抛异常。

c)sequence:利用底层DB提供的序列生成。

eg.

tt_oid_seq<

注:tt_oid_seq 是我们在Oracle中建立的,create sequence tt_oid_seq;

适用范围:

1>sequence依赖于底层DB,要求底层DB系统必须支持序列,eg.Oracle、DB2等

2>OID必须为long、int或short类型,定义为byte类型,在运行时会抛异常。

d)hilo(高低位算法):由Hibernate按照一种high/low算法来生成标识符,他从DB的特定表的字段中获取high值。

eg .

tt_hilo

hi

50

适用范围:

1〉hilo不依赖于底层DB系统,适用于所有的DBS。

2〉OID必须为long、int或short类型,定义为byte类型,在运行时会抛异常。

3〉hign/low算法生成的标识符只能在一个DB中保证唯一。

4〉当用户为Hibernate自行提供DB连接,或者Hibernate通过JTA,从应用服务器的数据源获得数据库连接时无法使用hilo,因为这不能保证hilo在新的DB连接的事务中访问hi值所在的表,这时如果DBS支持Sequence,可以使用seqhilo来产生OID,seqhilo从名为hi_sequence的序列里获取high值。

e)native:依据底层数据库自动生成标识符的能力,来选择使用identity、sequence或hilo标识符生成器。它能自动判断底层DB提供的生成标识符的机制。

eg.

注:针对Oracle数据库的生成方式是sequence,只不过需要一个特定名字的sequence,"hibernate_sequence"。MySQL和SQLServer选择 identity。

适用范围: 1〉适合跨DB平台开发,即同一个Hibernate应用需要连接多种DBS的场合。

2〉OID必须为long、int或short类型,定义为byte类型,在运行时会抛异常。

3、

(1)元素包含多个子元素。

(2)子元素设定类的属性和表的字段的映射。

a)name:指定持久化类的属性名。

b)type:指定Hibernate映射类型,Hibernate映射类型是Java类型与SQL类型的桥梁。

c)not-null:为true,表明不允许为空,默认为false。 d)column:指定与类属性映射的表的字段名,没设置Hibernate直接以类名作为字段名。

4、Hibernate采用XML文件来配置对象-关系映射,有以下优点:

(1)Hibernate既不会渗透到上层域模型中,也不会渗透到下层数据模型中。

(2)软件开发人员可以独立设计域模型,不必强迫遵守任何规范。

(3)数据库设计人员可以独立设计数据模型。

(4)对象-关系不依赖于任何程序代码,如果需要修改对象-关系映射,只需修改XML文件,不需要修改任何程序,提高了软件的灵活性,并且使维护更加方便

2)