Hibernate主键生成策略与<property>
标签
- 主键的分类
定义hbm.xml映射文件和POJO类时都需要定义主键
- 自然主键
- 代理主键
1、自然主键(业务主键)
主键本身就是表中的一个字段(实体中的一个具体属性),也即不具有业务含义的字段作为主键。比如说创建一个人员表,人员都会有一个身份证号(唯一的不可重复的),如果使用了身份证号作为主键,那么这种主键就称为是自然主键;
2、代理主键(逻辑主键)
主键的本身不是我们表中必须的一个字段(不是实体中的某个具体属性),也即不具有业务含义的字段作为主键。比如说还是创建一个人员表,没有使用人员中的身份证号,用了一个与这个表根本不相关的一个字段,例如ID、PNO,那么这种主键就称为是代理主键。
建议:尽量使用代理主键!因为一旦你的自然主键参与到了你的业务逻辑当中,那么后期就有可能要修改源代码。要满足一个OCP原则,即对程序的扩展是open的,对修改源码是close的。
主键生成策略
一般不允许用户手动设置主键,一般会将主键交给数据库或者手动编写程序进行设置。在Hibernate中为了减少程序编写,提供了很多种主键的生成策略。