jpa常用注解讲解

本文主要讲解jpa中常用的注解,如果在平时的使用中用到了新的注解,也会及时更新,方便查阅及复习。

使用在类上的注解:

  • @Entity:该注解标注在类上,以标识该类为一个实体类,可以交由jpa进行管理。

  • @Table:该注解标注在类上,主要作用是定义该实体对应在数据库中的信息,有以下几个常用属性:
    name:定义该实体对应数据库的表名,如果不指定,则使用类名作为表名;
    catalog:用于指定数据库实例名。如果不指定,新建的表则出现在数据库连接url指定的数据库中;
    schema:作用与catalog相同;
    indexes:用于对表字段建立索引。如:indexes={@Index(name=”idx_name_address”, unique=false, columnList=”name,address”)}
    uniqueConstraints:指定表的唯一性约束。可建立多个唯一性约束。如:uniqueConstraints={@UniqueConstraint(columnNames={“col1”,”col2”}),@UniqueConstraint(columnNames={“col3”,”col4”})}

  • @Inheritance:该注解在实体间存在继承关系的情况下使用,标注在父类上,以配置父类的属性与子类的属性在数据库中如何保存,只有strategy属性:
    strategy:指定父类的属性与子类的属性在数据库中保存的策略,取值为枚举值,主要有以下3类取值:
    (1)、InheritanceType.SINGLE_TABLE:父类的属性和子类的属性都保存在同一个表中;
    (2)、InheritanceType.TABLE_PER_CLASS:父类属性和子类的属性保存在不同的表,但是子类对应的表会保存父类的属性;
    (3)、InheritanceType.JOINED:父类属性和子类的属性保存在不同的表,但是子类对应的表不保存父类的属性,只保存父类对应数据的ID,即外键;
  • @DiscriminatorColumn:该注解在实体间存在继承关系的情况下使用,目的是定义一列表别列,以区分某条数据是属于哪个实体的数据。该注解当设置了父类的属性与子类的属性存放在同一张表中,即以上说的InheritanceType.SINGLE_TABLE策略时使用。该注解有以下几个常用属性:
    name:定义辨别列的名称;
    discriminatorType:定义辨别列的类型(DiscriminatorType.STRING, DiscriminatorType.Char、DiscriminatorType.INTEGER);
    length:定义辨别列的长度;
  • @DiscriminatorValue:与@DiscriminatorColumn配合使用,定义辨别列的值;
  • @PrimaryKeyJoinColumn:当实体继承关系的保存策略选择InheritanceType.JOINED时,子类使用该注解,以配置外键关联字段的信息,主要有以下几个常用属性:
    name:子类对应的表外键列名称;
    referencedColumnName:引用的外键表列名;

使用在属性上的注解:

  • @Column:标注在类的属性上,该注解可以指定该属性在数据库中对应列的配置信息。有以下几个常用属性:
    name:指定该属性对应在数据库中的列名;
    nullable:指定该属性在数据库对应的列是否可空;
    length:指定该属性在数据库对应的列长度;
    scale:指定数值类型列的位数
    precision:指定数值类型列的精度;
    unique:指定列是否是唯一
  • @Id:该注解标注在类的属性上,以标识该属性为主键。
  • @GenerateValue:该注解标注在类的属性上,配合@Id使用,作用在于指定主键的生成策略。有以下几个常用属性:
    stategy:指定生成主键的策略,枚举值,可取值有:GenerationType.AUTO、GenerationType.IDENTITY、GenerationType.SEQUENCE、GenerationType.TABLE;
    generator:指定生成主键的生成器,如果使用生成器的方式生成主键,还需要在主键字段上使用@GenericGenerator注解声明主键生成器使用的生成策略。由于生成器由实现持久化的具体提供者提供,不是jpa提供,所以如果使用生成器策略生成主键,可能会影响到系统的移植性。
  • @Temporal:该注解必须标注在日期类型的字段上,以标识该属性是哪种日期类型,该注解接收一个参数,可选值有:TemporalType.DATE、TemporalType.TIME、TemporalType.TIMESTAMP
  • @Enumerated:该注解标注在类的属性上,以标识该属性为枚举类型。该注解接收一个参数,以指定该枚举属性保存到数据库中是保存枚举对应的索引还是具体的枚举值。参数值可以为EnumType.ORDINAL或者EnumType.STRING
  • @Transient:该注解标注在类的属性上,以标识该属性不需要持久化到数据库中
  • @Basic:该注解标注在类的属性上,用于指定基本的信息,有以下几个常用属性:
    fetch:指定该属性的在查询时的抓取策略,抓取策略有FetchType.LAZY(懒加载)和FetchType.EAGER;
    optional:指定该属性对应的列是否可空,默认为true
  • @Lob:该注解标注在类的属性上,以标识该属性为大文本类型。
  • @OneToOne:指定该实体与该属性对应的实体为一对一的对应关系,主要有以下几个常用属性:
    cascade:属性的抓取策略,枚举值,可取的值有:CascadeType.REFRESH, CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST;
    optional:指定实体的关联关系是否是可选的,默认为true;
    fetch:指定该实体的抓取策略;
    mappedBy:该属性用在关系被维护方,值就是关系维护方对应的属于关系被维护方的那个属性;
    targetEntity:指定关联关系的class;
    orphanRemoval:指定移除了对应的实体关联关系时,是否移除相应的实体。
  • @JoinColumn:该注解用在关系的维护方,指定保存外键值的列名,需要配合@OneToOne使用。只有一个属性:
    name,指定保存外键值的列名
  • @ManyToOne、@OneToMany、@ManyToMany的属性与@OneToOne属性一致,不再累述。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐观男孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值