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)
最后更新于
这有帮助吗?