🧸🧸🧸🧸🧸
  • 🧸's Blog
  • CodeJam
    • Kickstart Round H 2018 A Big Buttons
    • Kickstart Round H 2018 B Mural
  • C++/C
    • CashBox Code
    • for迭代数组
    • 字符串操作
    • 在函数中,int与int&的区别
    • sizeof()
    • memset的用法
    • 传值&传引用&传指针
    • STL
  • 经典算法
    • n皇后问题
  • Java
    • servlet从网址传入参数中文乱码
  • SQL
    • 左外连接与右外连接的区别
  • API
    • DeepGTAV v2
    • VPilot
    • SantosNet
    • deepdrive
    • iceb.link API
  • Spring Boot
    • Entity实体
    • 是否加@service的区别
    • Entity内字段表中名字不能为system
由 GitBook 提供支持
在本页
  • Annotation
  • @Entity
  • @Id
  • @Table
  • @Column
  • @Transient
  • @temporal
  • @Enumerated

这有帮助吗?

  1. Spring Boot

Entity实体

Annotation

@Entity

1、每个Entity必须有无参数的构造函数(no-arg constructor)

2、每个Entity必须有primary key

3、Entity的class必须不能定义为final类型的

4、通过括号中的name属性定义实体名,注意:实体名不是数据库中的表名

@Entity(name="school")
public class Student {
     
    // fields, getters and setters
     
}

@Id

定义一张数据表的主键

若为自动生成,可选择4中策略:AUTO, TABLE, SEQUENCE, or IDENTITY.

如果定义为AUTO,JPA会自动选择任何一个策略来生成主键

@Entity
public class Student {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
     
    private String name;
     
    // getters and setters
}

@Table

定义数据库中数据表的名称:

@Entity
@Table(name="STUDENT")
public class Student {
     
    // fields, getters and setters
     
}

也可定义schema名称:

@Entity
@Table(name="STUDENT", schema="SCHOOL")
public class Student {
     
    // fields, getters and setters
     
}

@Column

规定数据表中每一列(每一个字段)的详情

可取值:name, length, nullable, unique

@Entity
@Table(name="STUDENT")
public class Student {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
     
    @Column(name="STUDENT_NAME", length=50, nullable=false, unique=false)
    private String name;
     
    // other fields, getters and setters
}

@Transient

使得数据字段为短暂存在的(非持久化)。也就是该数据字段不会存到数据表里。

@Entity
@Table(name="STUDENT")
public class Student {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
     
    @Column(name="STUDENT_NAME", length=50, nullable=false)
    private String name;
     
    @Transient
    private Integer age;
     
    // other fields, getters and setters
}

@temporal

定义该数据字段为时间值。在JPA2.2,支持: java.time.LocalDate, java.time.LocalTime, java.time.LocalDateTime , java.time.OffsetTime, java.time.OffsetDateTime

@Entity
@Table(name="STUDENT")
public class Student {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
     
    @Column(name="STUDENT_NAME", length=50, nullable=false, unique=false)
    private String name;
     
    @Transient
    private Integer age;
     
    @Temporal(TemporalType.DATE)
    private Date birthDate;
     
    // other fields, getters and setters
}

@Enumerated

枚举。

public enum Gender {
    MALE, 
    FEMALE
}
@Entity
@Table(name="STUDENT")
public class Student {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
     
    @Column(name="STUDENT_NAME", length=50, nullable=false, unique=false)
    private String name;
     
    @Transient
    private Integer age;
     
    @Temporal(TemporalType.DATE)
    private Date birthDate;
     
    @Enumerated(EnumType.STRING)
    private Gender gender;
     
    // other fields, getters and setters
}

如果我们要将枚举类中项目的序号保存在数据库中,则无需标出@Enumerated,如果我们要将枚举类中项目的字符串保存在数据库中,需要加上@Enumerated(EnumType.STRING)

上一页iceb.link API下一页是否加@service的区别

最后更新于5年前

这有帮助吗?