JPA注解–第2章 属性级别注解

一、前提

这文章的前提需要了解编写的jpa测试用例。请参考文章:JPA测试用例

属性级别的注解一览表:

 

二、属性级别注解添加方式:

1、写在属性字段上面;

2、写在属性的get访问器的上面。

 

三、属性级别注解详情

@Id 注解

@Id:必须,定义了映射到数据库表的主键的属性,一个实体类可以有多个或者多个属性被映射为主键,可至于主键属性或者getxxxx()前。

注意:如果有多个属性定义为主键属性,该实体类必须实现serializable接口。

写在属性前:

写在get方法前:

 

添加测试:

 

@GeneratedValue注解

@GeneratedValue(strategy=GenerationType,generator=””)

可选,可以用于定义主键生成策略。

strategy表示主键生成策略,取值有:

GenerationType.AUTO:根据底层数据库自动选择(默认)。

GenerationType.IDENTITY:使用数据库的INDENTIT列来保证唯一。

GenerationType.SEQUENCE:使用数据库的SEQUENCE 列来保证唯一。

GenerationType.NONE:容器不负责主键的生成,由调用程序来完成。

GenerationType.TABLE:容器指定用底层的数据表确保唯一。结合@TableGenerator使用。

@Id
@GeneratedValue(strategy=GenerationType.AUTO)

添加测试添加学生的测试案例:

 

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)

 

添加测试案例:

 

@Id

@TableGenerator(name=”tab_cat_gen”,allocationSize=1)

@GeneratedValue(strategy=GenerationType.TABLE)

Generator表示主键生成器的名称,这个属性通常和ORM框架相关,例如:Hibernate可以指定uuid等主键生成方式。

默认的情况下:

 

添加测试案例:

 

多次执行添加结果:

 

@Id

@GeneratedValue(strategy=GenerationType.SEQUENCE)

 

 

添加测试用例:

 

注意:这样执行之后会报错,因为这个属性是Oracle的主键生成策略。

更换Hibernate配置文件,并添加。

 

@Column注解

@Column 可将属性映射到列,使用该注解来覆盖默认值。

(1) name 可选,列名(默认值是属性名)
(2) unique 可选,是否在该列上设置唯一约束(默认值false)
(3) nullable 可选,是否设置该列的值可以为空(默认值true)
(4) insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true)
(5) updatable 可选,该列是否作为生成的update语句中的一个列(默认值true)
(6) columnDefinition 可选: 为这个特定列覆盖SQL DDL片段 (这可能导致无法在不同数据库间移植)。表示该字段在数据库中的实际类型 . 通常 ORM 框架可以根据属性类型自动判断数据库中字段的类型 , 但是对于 Date 类型仍无法确定数据库中字段类型究竟是 DATE,TIME 还是 TIMESTAMP. 此外 ,String 的默认映射类型为 VARCHAR, 如果要将 String 类型映射到特定数据库的 BLOB 或 TEXT 字段类型 , 该属性非常有用 。
(7) table 可选,定义对应的表(默认为主表)
(8) length 可选,列长度(默认值255)
(8) precision 可选,列十进制精度(decimal precision)(默认值0)
(10) scale 可选,如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)

 

@Embedded注解

@Embedded 是注释属性的,表示该属性的类是嵌入类。

注意:同时嵌入类也不许标注@Embeddable注解。

 

 

@EmbeddedId注解

@EmbeddedId使用嵌入式主键类实现复合主键。

注意:嵌入式主键类必须实现serializable接口,必须有默认的public无参数的构造方法、必须覆盖equals和hashCode方法。

 

 

@Transient注解

可选,表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性,如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架默认其注解为@Basic

标明为@Transient的字段不会在数据库表中生成。

 

 

 






如果您认为本教程质量不错,读后觉得收获很大,预期工资能蹭蹭蹭的往上涨,那么不妨小额赞助我一下,让我有动力继续写出高质量的教程。

发布者

souvc

souvc

搜你所想,投你所好。

发表评论