一,为什么要用自定义ID策略?
JPA自带的ID生成策略足以满足我们一般的需求,自定义的ID生成策略可以为我们实现更加精细化的统计方案,且可以跨平台使用。
二,策略声明的位置决定方案的作用域
- 声明在类的上方:所有属性都可以引用。
- 声明在属性上方:该属性专用。
- 其实就是: 声明在类的上面就是公共计数器,声明在属性上面就是私有计数器。
三,创建一种策略方案。
策略分四种,AUTO,IDENTITY, SEQUENCE, TABLE
- AUTO最常用,是默认值
- IDENTITY用于MYSQL,
- CEQUENCE用于ORACLE.
- TABLE跨平台
其中,SEQUENCE和TABLE可以自定义策略方案,其策略声明格式为:
@SequenceGenerator(name= “xxx”, sequenceName=”xxx”,allocationSize=”integer”)- name : 策略名
- sequnceName: 所生成的序列排序方案的名字,
- allocationSize: 递增值
@TableGenerator(name= “xxx”, table=”xxx”,pkColumName = “xxx”, valueColumName=”xxx”, pkColumValue= “xxx”, allocationSize=”integer”)
- name: 策略名
- table:表名
- pkColumName: 表示主键字段名,此字段名与实体类中的属性字段名无任何关联!
- valueColumName: 表示序值字段名。
- pkColumValue=表示主键字段值 ,
pkColumName/ pkColumValue 是成对的 valueColumName/valueColumValue 其实也是成对的,只不过valueColumValue 的值就是当前策略自动生成的ID,所以略过了
四,引用一种策略方案
@GeneratorValue(strategy= GeneratorType.xxx, generator= ” 策略名”)