JPA 注解

1. 基本注解

  • @Entity

    • 用于类声明之前,表明该 java 类是一个实体类,将映射到指定的数据库表
  • @Table:详情参照大佬的github

    • 当实体类与其映射的数据库表名不同的时候需要使用@Table注解说明。
    • 该注解通常与@Entity一起使用
    • 常用属性:一般只需要指定name即可
      • name:数据库的表名。默认为类名
      • catalog:设置数据表所属的数据库目录,默认为数据库系统缺省的 catalog
      • schema:设置数据表所属的数据库模式,默认为用户缺省的 schema。catalog和schema的区别
      • uniqueConstraints:表的唯一约束(除了由 @Column@JoinColumn 注解指定的约束以及主键的约束之外的约束),通过使用 @UniqueConstraint 注解来声明,仅在允许自动更新数据库表结构的场景中起到作用,默认没有其他额外的约束条件。
      • indexes:表的索引,通过使用 @Index 注解来声明,仅在允许自动更新数据库表结构的场景中起到作用,默认没有其他额外的索引。
  • @Id

    • 用在属性(字段)上,表明该属性|字段是表的主键列
    • 也可以用在getter上
  • @GeneratedValue:详情参照大佬的github

    • 标注在有@Id注解的字段上,用于标注主键的生成策略。默认AUTO
    • 可选值:根据需求指定,一般只需要指定strategy
      • strategy
        • GenerationType.IDENTITY 自增,多数数据库支持: MySQL,SQL Server,DB2,Derby,Sybase,PostgreSQL
        • GenerationType.SEQUENCE 使用序列作为主键生成策略,支持的数据库: Oracle、PostgreSQL、DB2
        • GenerationType.TABLE 在数据库中新建序列表来生成主键,使用该策略更易于数据库移植,但是建议不要优先使用
        • GenerationType.AUTO 把主键生成策略交给JPA厂商,由它根据具体的数据库选择合适的策略,默认值
    • generator:
      • 主键生成器的名称。该名称为 @TableGenerator@SequenceGenerator 注解中 name 参数的值。默认为持久化提供者(如 Hibernate)提供的id生成器。
  • @Basic:一般不用

    • 表示一个简单属性到数据库表的映射,对于没有任何标注的属性,默认即为@Basic
    • 可选值
      • fetch:读取策略,有 EAGER 和 LAZY 两种,分别表示立即加载和懒加载
      • optional:表示该属性是否允许为 null 值,默认为true
  • @Column

    • 设置生成的数据表的属性

    • 可选值:根据需要制定即可

      • name:列(字段)名。默认为属性名
      • unique:是否唯一,默认false。唯一约束
      • nullable:是否允许为空,默认为true。非空约束
      • insertable:列是否包含在 insert 语句中,默认为true
      • updatable:列是否包含在 UPDATE 语句中,默认为 true
      • columnDefinition:创建表时该属性在数据库中的类型。默认使用推断的类型作为数据库中的类型
      • table:当前列所属的表的名称
      • length:列的长度,仅对字符串类型的列生效。默认为255
      • precision:列的精度,仅对十进制数值有效,表示有效数值的总位数。默认为0
      • scale:列的精度,仅对十进制数值有效,表示小数位的总位数。默认为0
    • 注意:

      • precision 和 scale 对BigDecimal有效,对Double无效,Double类型需要手动指定类型:

      • @Column(columnDefinition = "double(8,2)")
        private Double doubleField;
        

2. 其他注解

  • @Transient

    • 该注解标注的属性不会映射到数据库中
  • @Temporal

    • 用来调整日期类型的精度
    • 取值
      • TemporalType.DATE:创建表的时候,MySql中的类型是 date
      • TemporalType.TIME:创建表的时候,MySql中的类型是 time
      • TemporalType.TIMESTAMP:创建表的时候,MySql中的类型是 datetime
  • @MappedSuperclass:详见大佬的github

  • 补充:

    • GenerationType.SEQUENCE 和 GenerationType.TABLE 通常分别与注解 @SequenceGenerator 和 @TableGenerator 一起使用,这两个注解都是创建了一张新的表,下面是 @TableGenerator 的示例

    • @Id
      @TableGenerator(
          name = "tableId",   // name属性规定该注解的名字,方便 GeneratedValue 的 generator 引用
          table = "t_id",		// 创建的表名
          allocationSize = 1,	// 每次增加多少。默认50
          initialValue = 1,	// id的初始值.默认0
          pkColumnName = "pk_name",	// t_id中表示主键的列名
          pkColumnValue = "pk_value",	// t_id中表示主键的值的列名
          valueColumnName = "user_id") // 这张表要以哪条记录为参考,
      							  // 即表示下面的id以 t_id 表中的 user_id 这条记录为参考生成主键
      @GeneratedValue(strategy = GenerationType.TABLE, generator = "tableId")
      private Long id;
      

本节代码:点击此处

posted @ 2019-12-11 14:00  _ann  阅读(216)  评论(0编辑  收藏  举报