JPA学习笔记(二)——JPA 注解

文章目录

    • 1. JPA注解
      • 1.1 @Entity
      • 1.2 @Table
      • 1.3 @Id
      • 1.4 @GeneratedValue
      • 1.5 @Basic
      • 1.6 @Column
      • 1.7 @Transient
      • 1.8 @Temporal
      • 1.9 @TableGenerator

1. JPA注解

1.1 @Entity

标注在实体类上,表示此类对应一个数据表。

1.2 @Table

与表对应,一般要与 @Entity 一起写。

@Table(name = "JPA_CUSTOMER") // 指定表名为 JPA_CUSTOMER

加 @Table 注解时,表名即为类名,通常要加。

1.3 @Id

映射数据表中的主键,该注解可以标注在属性上,也可以写在 Getter 方法上。

1.4 @GeneratedValue

  1. 标注主键的生成策略,通过Strategy属性指定,默认情况下 JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer 对应 identity,MySQL对应 auto increment 。
  2. javax.persistence.GenerationType 中定义了几种可选的策略。
    AUTO:默认,JPA 自动选择合适的策略。
    IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持。
    SEQUENCE:通过序列产生主键,通过 @SequenceGenerator 注解指定序列名,Mysql不支持。
    TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。

1.5 @Basic

  1. 若无任何注解,则默认添加 @Basic 注解,表示一个属性到数据库表的字段的映射。
  2. optional:表示该属性是否允许为 null,默认为 true。

1.6 @Column

  1. 指定数据库中显示的列名,若与 Getter 后的名字一样可以不写。
  2. 该标注还有多个属性,包含 unique,nullable(可为空),length 等。
  3. 可以与 @Id 同时使用,也可以在 Getter 方法上添加。

1.7 @Transient

  1. 表明该属性并非一个到数据库表的字段的映射,ORM 框架将忽略该属性。
  2. 如果一个属性并非数据库表的字段映射,就务必将其标示为 @Transient,否则 ORM 框架默认其注解为 @Basic。
  3. 以 get 开头的工具方法,因为不需要映射为数据表的一列, 所以加 @Transient 注解。

1.8 @Temporal

  1. 由于在 Java API 中没有定义 Date 类型的精度,而数据库中有时间的精度,例如 Date,Time,TIMESTAMP 三种精度,即:日期,时间,时间戳。那么在进行属性映射时可以使用 @Temporal 注解来调整精度。
  2. javax.persistence.TemporalType 中定义了几种精度类型
    DATE:日期。
    TIME:时间。
    TIMESTAMP:时间戳。

1.9 @TableGenerator

  1. 当 @GeneratedValue 注解的主键生成策略 strategy 属性为 GenerationType.TABLE 时,就需要指定由哪张表生成主键。

  2. 例如创建一个 jpa_id_generator 表,里面包含三个字段,ID,PK_NAME,PK_VALUE。
    JPA学习笔记(二)——JPA 注解_第1张图片

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "ID_GENERATOR")
    @TableGenerator(name = "ID_GENERATOR", table = "jpa_id_generators", pkColumnName = "PK_NAME", pkColumnValue = "CUSTOMER_ID", valueColumnName = "PK_VALUE", allocationSize = 100)
    

    name:表示该主键生成策略的名称,它被引用在 @GeneratedValue 中设置的 generator 值中。
    table:表示表生成策略所依赖的表名。
    pkColumnName:确定一列。
    pkColumnValue:确定上面一列中的一行。
    valueColumnName:上面确定的一行可能有多列,通过列名唯一确定那一列,对应值将会随着每次创建累加。
    allocationSize:表示每次主键值增加的大小,默认值为 50。(我这里设置为100,然后 id 为什么从 -97 开始?哪位大佬能给我解释一下,谢谢

你可能感兴趣的:(JPA,java,后端,数据库)