实体类最好有主键列。主键尽量使用可以值为null的类型。
@配置主键
使用@Id声明该列为主键列。
同时使用@Column声明该列的列名。当列为与属性一致时,@Column配置可以省略。
@GeneratedValue用于指定主键的生成策略。如果不配置@GeneratedValue,则必须手动设置ID值。
@Id
@Column(name="id")
@GeneratedValue(strategy= GenerationType.AUTO)
privateInteger id;
到目前为止,@注解只支持4种主键生成策略
ATUO | 自动方式,根据底层数据库自动选择。如果为MySQL等支持自增长类型的数据库,则为自增长类型。 |
TABLE | 使用指定的表来决定主键的取值,一般结合@TableGenerator使用,例如: @Id @TableGenerator(name="tb_cat_gen",allocationSize=1) @GeneratedValue(strategy=GenerationType.TABLE,generator="tb_cat_gen") private Integer id; |
SEQUENCE | 使用Sequence来决定主键的取值,适合Oracle、DB2、PostgreSQL、SAP DB等支持Sequence的数据库,一般结合@SequenceGenerator使用。 @Id @SequenceGenerator(name="seq_cat",allocationSize=25) @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_cat") private Integer id; |
IDENTITY | 支持DB2、MySQL、MS SQL Server、Sybase与HypersonicSQL数据库的idenit类型主键。 |
XML配置主键
<id name="id" column="id">
<generatorclass="native" />
</id>
XML主键生成规则
native | 取决于数据库,相当于GenerationType.AUTO |
identity | 使用identity类型,相当于GenerationType.IDENTITY |
sequence | 使用sequence,相当于GenerationType.SEQUENCE。需要指定sequence的名称,例如: <id name="id" column="id"> <generator class="sequence"> <param name="sequence">person_id_sequence</param> </generator> </id> |
increment | 自增长类型,由Hibernate而不是数据维护 |
hilo | hi/low算法,使用指定的表给主键赋值,相当于GEnerationType.TABLE。需要指定表名、列名等。 |
seqhilo | 基于sequence的hilo算法 |
uuid | 使用128位UUID算法计算一个唯一的值,会使用IP地址及相关的计算机硬件信息。计算结果为32位的16进制数,对应的主键类型必须为String |
guid | 使用MySQL或者MS SQL Server等数据库提供的CUID值 |
assigned | 默认值,不使用任何策略,在保存进数据库之前必须使用setter方法赋值 |
select | 使用数据库触发器赋值 |
foreign | 使用外键赋值,在一对一实体关系时,可保证关系双方的ID保持一致。 |
今天就先写到这里,更多学习资料