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)

最后更新于

这有帮助吗?