最近在温习spring框架的内容,本篇是对之前的hibernate框架的一些总结:
对象/关系数据库映射(一)基础
- 4.1.1.对持久化对象的要求
1.提供一个无参的构造器。使Hibernate可以使用Constructor.newInstance() 来实例化持久化类。
2.提供一个标识属性(identifier property)。通常映射为数据库表的主键字段。如果没有该属性,一些功能将不起作用,如:Session.saveOrUpdate()。
3.为类的持久化类的字段声明访问方法(get/set)。Hibernate对JavaBeans风格的属性实行持久化。
4.使用非final类。在运行时生成代理是Hibernate的一个重要的功能。如果持久化类没有实现任何接口,Hibnernate 使用 CGLIB 生成代理。如果使用的是 final 类,则无法生成CGLIB代理。(这边要说明的是我们涉及的代理模式主要有两种:
基于jdk的动态代理,基于类的cglib代理,这个具体的在以后会细讲)
5.重写eqauls()和hashCode()方法。如果需要把持久化类的实例放到Set中(当需要进行关联映射时),则应该重写这两个方法。 - OID:为了在系统中能够找到所需对象,需要为每一个对象分配一个唯一的标识号。在关系数据库中称之为主键,而在对象术语中,则叫做对象标识(Object identifier-OID)
- 4.3.1.持久化类的属性及访问方法
Hibernate中持久化类的访问者有两个:
1,Java应用程序
2,hibernate(何时调用get、set方法?如下图所示)
- 4.3.2.使用基本数据类型和包装类型的区别
<property name=“price” type=“double” column=“PRICE” />
基本类型可直接运算、无法表达null、数字类型的默认值为0。
包装类默认值是null。当对于默认值有业务意义的时候需要使用包装类。 - 4.3.3.Hibernate访问持久化类属性的策略
- propertye (默认值):
表明hibernate通过getXXX和setXXX来访问类属性。推荐使用。提高域模型透明性。
field
hibernate通过java反射机制直接访问类属性。对于没有get与set方法的属性可设置该访问策略。
noop
它映射Java持久化类中不存在的属性,即主要用于HQL(用query接口测试,使用hql语句)中,当数据库中有某列,而实体中不存在的情况。
4.4.映射对象标识符(OID,对应数据库主键)
4.4.1.OID,唯一性的标志
主键必备条件:
1,不能为null。
2,唯一,不能重复。
3,永远不会改变。
4.4.4.java与Hibernate如何区分对象
Java语言按内存地址(==)或equals()方法区分不同的对象
Hibernate中用对象表示符(OID)来区分对象
4.4.5.6.3.映射复合主键(方法二)
以上是本人觉得hibernate一些重要的地方的一些整理,对应的文档大家也可以下载看看。
http://download.csdn.net/detail/z1729734271/9616747