Spring Data JPA 中有多个注解可用于映射数据库表字段,具体如下:
@Entity
:用于添加在实体类上,定义该 Java 类成为被 JPA 管理的实体,将映射到指定的数据库表。例如:import javax.persistence.Entity; @Entity public class User { // 类的属性和方法 }
@Table
:与@Entity
一同使用,用于指定数据库的表名等详细信息。例如:import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "custom_user_table") public class User { // 类的属性和方法 }
@Id
:定义属性为数据库表中的主键列,一个实体里面必须有一个。例如:import javax.persistence.Entity; import javax.persistence.Id; @Entity public class User { @Id private Long id; }
@Column
:用于定义该属性对应数据库中的列名以及其他相关属性,如是否唯一、是否可为空、列的长度等。例如:import javax.persistence.Entity; import javax.persistence.Column; @Entity public class User { @Column(name = "user_name", unique = true, nullable = false, length = 50) private String username; }
@Basic
:表示属性是到数据库表字段的映射。如果实体的字段上没有任何注解,默认即为@Basic
。可以设置属性的抓取方式(如立即加载或延迟加载)、是否可为空等属性。例如:import javax.persistence.Basic; import javax.persistence.FetchType; @Entity public class User { @Basic(fetch = FetchType.LAZY) private String description; }
@Transient
:表示该属性并非是一个到数据库表的字段的映射,JPA 映射数据库的时候会忽略它,与@Basic
作用相反。例如:import javax.persistence.Transient; @Entity public class User { @Transient private int tempVariable; }
@GeneratedValue
:用于指定主键的生成策略。属性strategy
可设置生成策略类型,如GenerationType.IDENTITY
(数据库自增长,多用于 MySQL)、GenerationType.SEQUENCE
(通过序列产生主键)等。例如:import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; }
@Temporal
:用来设置Date
类型的属性映射到对应精度的字段,如TemporalType.DATE
(映射为数据库DATE
类型)、TemporalType.TIME
(映射为数据库TIME
类型)、TemporalType.TIMESTAMP
(映射为数据库DATETIME
类型)。例如:import javax.persistence.Entity; import javax.persistence.Temporal; import javax.persistence.TemporalType; import java.util.Date; @Entity public class Event { @Temporal(TemporalType.DATE) private Date eventDate; }
@Enumerated
:用于映射枚举字段。可以指定枚举值在数据库中的存储方式,如EnumType.ORDINAL
(存储枚举字段的下标)或EnumType.STRING
(存储枚举字段的name
)。例如:import javax.persistence.Entity; import javax.persistence.Enumerated; @Entity public class User { @Enumerated(EnumType.STRING) private Gender gender; public enum Gender { MALE, FEMALE } }
@Lob
:将属性字段映射成数据库支持的大对象类型,如CLOB
(长字符串类型)或BLOB
(字节类型)。例如:import javax.persistence.Entity; import javax.persistence.Lob; @Entity public class Document { @Lob private String textContent; }