1.持久化对象POJO编写规则:
1) 有空参public构造器;
2) 提供标识属性,映射数据表主键;
3) 属性提供setter和getter方法;
4) 属性使用基本数据类型的包装类型。基本类型在数据库中不能区分null和0;
5) 不使用final修饰。如果使用final则无法生成代理对象;当使用了final,load查询将如同get查询。
2.POJO的OID:
OID是持久化类与数据表主键对应的属性,用来唯一区分持久化对象。
自然主键:采用数据库中有意义的列的值作为主键(有意义)
代理主键:采用自动生成的流水号、UUID作为主键(无意义,推荐)
3.数据类型:
基本类型无法区分null和0,开发中POJO属性都使用包装类型。
4.持久化类配置POJO.hbm.xml:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
< xml version="1.0" encoding="UTF-8" > DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> |
1)主键生成策略increment:顶层递增:

由hibernate自动完成,原理:先查询最大值,再插入此值加一。OID必须为long、int或short类型。
优点:跨数据库。
缺点:多线程并发访问问题。
2)主键生成策略identity:底层递增:

由数据库自动完成,要求数据库必须支持自增主键。mysql支持,oracle不支持。OID必须为long、int或short类型。
优点:无并发访问问题。
3)主键生成策略sequence:序列:
由数据库自动完成递增,要求数据库必须支持序列。mysql不支持,oracle支持。OID必须为long、int或short类型。
Oracle:
1创建序列:create sequence myseq;
2调用序列:insert into customer values (myseq.nextval); #序列加一
4)主键生成策略native:本地:

采用数据库支持的自增策略。 mysql:identity,oracle:sequence。OID必须为long、int或short类型。
优点:跨数据库平台。
5)主键生成策略uuid:标识符:

由数据库自动创建。 uuid是32位唯一字符串,表单主键使用varchar类型,POJO对应属性是String类型。
6)主键生成策略assigned:手动指定:

在调用hibernate时手动指定主键的值,用于自然主键(有意义的)。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public void testInsertAssigned() { Session session = UtilGetSesstion.openSession(); Transaction transaction = session.beginTransaction(); User user = new User(); user.setId(20130124); |
7)主键生成策略:复合主键:
(1)编写POJO类 Person.java:
| 1 2 3 4 5 6 7 8 9 10 11 |
package cn.cvu.domain; import java.io.Serializable; |
(2)配置POJO.hbm.xml:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
< xml version="1.0" encoding="UTF-8" > DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.cvu.domain"> <class name="Person" table="table_person" catalog="db_hibernate"> |
(3)配置hibernate.cfg.xml,加载Person.hbm.xml文件:

(4)操作类的方法:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public void testInsert() { Configuration configuration = new Configuration().configure(); SessionFactory sessionFactory = configuration.buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Person person = new Per |