jpa 基础注解

转自:https://www.zybuluo.com/zhuanxu/note/999965

1.@Entity和@Table

@Entity标注用于实体类,表明该Java类为实体类,将映射到指定的数据库表。

当实体类与其映射的数据库表明不同名时,需要使用@Table标注说明。@Table标注和@Entity标注一同使用,标注与实体类上。

@Table注解的常用属性是name,用于指明数据库的表名。

@Entity
@Table(name = "sy_user")
public class UserEntity {
}

2.@Id和@GeneratedValue

@Id注解应用于实体的属性或者属性对应的getter方法,表示该属性映射为数据库表的主键。

@GeneratedValue与@Id一起使用,表示主键的生成策略,通过strategy属性指定。

在javax.persistence.GenerationType中定义了以下几种可供选择的策略:

  1. IDENTITY:采用数据库ID自增长的方式产生主键,Oracle 不支持这种方式。
  2. AUTO: JPA 自动选择合适的策略,是默认选项。
  3. SEQUENCE:通过序列产生主键,通过@SequenceGenerator标注指定序列名,MySQL 不支持这种方式。
  4. TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略更易于做数据库移植。

3.@Basic

@Basic表示属性到数据库表的字段的映射。一个@Entity标注的实体类中的属性 ,如果没有任何注解,默认即为@Basic

@Basic注解有两个常用属性:

  1. fetch: 表示实体类对应属性的读取策略,有EAGER和LAZY两种取值,分别表示主动抓取和延迟加载,默认值为EAGER。
  2. optional: 表示该属性是否允许为null,默认值为true。

4.@Column

当实体类的属性与其映射的数据库表的列名称不同时,可以使用@Colunm标注。该标注描述了数据库表中该字段的详细定义,包含以下属性:

  1. name:表示数据库表中该字段的名称,默认情形属性名称一致。
  2. nullable:表示该字段是否允许为null,默认为true。
  3. unique:表示该字段是否是唯一标识,默认为false。
  4. length:表示该字段的大小,仅对String类型的字段有效。
  5. insertable:表示在 ORM 框架执行插入操作时,该字段是否应出现 INSETRT 语句中,默认为true。
  6. updateable:表示在 ORM 框架执行更新操作时,该字段是否应该出现在 UPDATE 语句中,默认为true。对于一经创建就不能更改的字段,该属性非常有用,比如email属性。
  7. columnDefinition:表示该字段在数据库中的实际类型。通常 ORM 框架可以根据属性类型自动判断数据库中字段的类型,但是依然有些例外: 
    1. Date类型无法确定数据库中字段类型究竟是DATE、TIME还是TIMESTAMP
    2. String的默认映射类型为VARCHAR,如果希望将String类型映射到特定数据库的BLOB或TEXT字段类型,则需要进行设置

 5.@Transient

@Transient表示该属性并非一个到数据库表的字段的映射,JPA 将忽略该属性。

如果一个属性并非数据库表的字段映射,就务必将其标注为@Transient,否则 JPA 默认其注解为@Basic。

6.@Temporal

在数据库中,表示时间类型的数据有 DATE,TIME,和 TIMESTAMP 三种精度 (即单纯的日期,时间,或者两者兼备)。 可使用@Temporal来设置Date类型的属性映射到对应精度的字段。

  1. @Temporal(TemporalType.DATE)映射为日期 // date (只有日期)
  2. @Temporal(TemporalType.TIME)映射为日期 // time (是有时间)
  3. @Temporal(TemporalType.TIMESTAMP)映射为日期 // date time (日期 + 时间)

7.@Lob

@Lob标注表示将属性映射成数据库支持的大对象类型,Clob 或者 Blog。其中:

  1. Clob(Character Large Ojects)类型是长字符串类型,java.sql.Clob、Character[]、char[] 和 String 将被映射为 Clob 类型。
  2. Blob(Binary Large Objects)类型是字节类型,java.sql.Blob、Byte[]、byte[] 和 实现了Serializable接口的类型将被映射为 Blob 类型。 
    因为这两种类型的数据一般占用的内存空间比较大,所以通常使用延迟加载的方式,与@Basic标注同时使用,设置加载方式为FetchType.LAZY。

一般情况下并不需要太多的设置,其默认行为足以处理大部分场景,这也是约定大于配置的原则。

可置于属性的注解都能置于对应的getter,一般情况下应该在整个项目中使用其中一种方式,而不能混用。

猜你喜欢

转载自blog.csdn.net/Cainiao111112/article/details/82957893
今日推荐