JPA中的实体类需要满足以下条件:
- 类必须被@Entity注解,用于定义该类是一个实体类。
- 类必须有一个主键属性,用于 uniquely 标识这个实体。主键属性需要被@Id注解。
- 主键生成策略通过@GeneratedValue注解指定。常用的有AUTO、IDENTITY、SEQUENCE等。
- 类的属性需要被@Column注解,用于指定数据库表的列名和属性的映射关系。
- 实体类必须有一个无参构造器,JPA通过反射进行实例化需要无参构造器。
- 实体关系可以通过@OneToOne、@OneToMany、@ManyToOne等注解指定。
一个简单的例子:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@ManyToOne
@JoinColumn(name = "dept_id")
private Dept dept;
public User() {}
public Long getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
}
可以看出,该User实体类满足了上述条件:
- 使用@Entity标识为实体类
- id属性为主键,使用@Id标识
- 使用@GeneratedValue指定主键生成策略为IDENTITY
- name属性使用@Column指定映射的数据库字段名为name
- 有一个空参构造器
- 使用@ManyToOne和@JoinColumn指定dept属性与Dept实体的关系
所以,理解JPA实体类的定义规则和各注解的作用是使用JPA必须掌握的知识。只有实体类定义正确,JPA才可以正常工作并与数据库实现映射。