主键由数据库mysql 映射native_IT忍者神龟之Hibernat持久化对象-数据表映射配置回想...

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)主键生成策略increment:顶层递增:

d67254bc5962eeef171a0fc96a183665.png

由hibernate自己主动完毕,原理:先查询最大值。再插入此值加一。OID必须为long、int或short类型。

长处:跨数据库。

缺点:多线程并发訪问问题。

2)主键生成策略identity:底层递增:

4ef9ce61c817a195454c4d855aecda69.png

由数据库自己主动完毕,要求数据库必须支持自增主键。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:本地:

0f01bca7b2249e896c14ecde325d5dc1.png

採用数据库支持的自增策略。 mysql:identity,oracle:sequence。

OID必须为long、int或short类型。

长处:跨数据库平台。

5)主键生成策略uuid:标识符:

384bfe44c4e6d31ad368ba57cadb5727.png

由数据库自己主动创建。 uuid是32位唯一字符串。表单主键使用varchar类型,POJO相应属性是String类型。

6)主键生成策略assigned:手动指定:

6cd972909541a596350328ef438aab4e.png

在调用hibernate时手动指定主键的值,用于自然主键(有意义的)。

7)主键生成策略:复合主键:

(1)编写POJO类 Person.java:

(2)配置POJO.hbm.xml:

(3)配置hibernate.cfg.xml,载入Person.hbm.xml文件:

a95a53e1dfc547c52f038a2da4954270.png

(4)操作类的方法:

(5)结果:

5aee42e4f3419c8d4baab7478b1791fa.png

INFO: HHH000262: Table not found: tb_person

2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute

ERROR: HHH000388: Unsuccessful: create table db_hibernate.tb_person (namef varchar(255) not null, names varchar(255) not null, age integer, city varchar(255), primary key

(namef, names)) type=InnoDB

2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute

ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=InnoDB' at line 7

2013-11-5 10:07:12 org.hibernate.tool.hbm2ddl.SchemaUpdate execute

INFO: HHH000232: Schema update complete

e95b1d7e1b01ba564e86c73fcf919606.png

-end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值