Hibernate主键生成策略与property标签

Hibernate主键生成策略与<property>标签

- 主键的分类

定义hbm.xml映射文件和POJO类时都需要定义主键

  • 自然主键
  • 代理主键

1、自然主键(业务主键)
主键本身就是表中的一个字段(实体中的一个具体属性),也即不具有业务含义的字段作为主键。比如说创建一个人员表,人员都会有一个身份证号(唯一的不可重复的),如果使用了身份证号作为主键,那么这种主键就称为是自然主键;

2、代理主键(逻辑主键)
主键的本身不是我们表中必须的一个字段(不是实体中的某个具体属性),也即不具有业务含义的字段作为主键。比如说还是创建一个人员表,没有使用人员中的身份证号,用了一个与这个表根本不相关的一个字段,例如ID、PNO,那么这种主键就称为是代理主键。

建议:尽量使用代理主键!因为一旦你的自然主键参与到了你的业务逻辑当中,那么后期就有可能要修改源代码。要满足一个OCP原则,即对程序的扩展是open的,对修改源码是close的。

主键生成策略
一般不允许用户手动设置主键,一般会将主键交给数据库或者手动编写程序进行设置。在Hibernate中为了减少程序编写,提供了很多种主键的生成策略。
Hibernate主键生成策略与property标签

<propert>标签

关于<property>标签
该标签用来建立类中的普通属性与表中非主键字段的对应关系。
name:类中的属性名称
column:表中的主键名称,类中的属性名和表中的字段名(主键名)如果一致,column可以省略
length:字段长度,如果length忽略不写,且你的表是自动创建这种方案,那么length的默认长度是255(可以根据你的映射文件自动建表,如果现在数据库里面是没有表的,那么只要一运行咱们的程序,它就可以帮你把表建起来。如果你没有给定长度,那么它便会使用默认长度,像字符串的长度默认就是255)
type:指定类型,你可以不用写,Hibernate会帮你自动转换
该标签中的子标签主要是描述主键生成策略的,这里就不做篇幅来介绍了,请看后面的文章。

该标签中有如下这些属性:
name:类中的属性名
column:表中的字段名
length:长度
type:类型
not-null:设置是否非空
unique:设置唯一

关于Hibernate映射配置文件中的类型问题
对于type属性它的取值可以有三种:

java—hibernate—SQL
Hibernate主键生成策略与property标签