JPA中的实体类可以使用以下注解来定义关系映射:
- @OneToOne:定义一对一关系,用于映射两个实体类之间的一对一关联。
- @OneToMany:定义一对多关系,用于映射一个实体类关联多个实体类。
- @ManyToOne:定义多对一关系,用于映射多个实体类关联一个实体类。
- @ManyToMany:定义多对多关系,用于映射多个实体类相互关联。
- @JoinColumn:用于定义两表之间的关联列。主要用于一对一和多对一关联关系。
- @JoinTable:用于定义中间表,主要用于多对多关联关系。
- @MappedSuperclass:用于定义父类实体,该实体的属性会映射到子类实体中。
- @Inheritance:用于定义继承关系,有三种策略:单表、联表、表-每-类。
代码示例:
// 一对一
@Entity
public class User {
@Id
private int id;
@OneToOne
@JoinColumn(name = "address_id")
private Address address;
}
// 一对多
@Entity
public class Post {
@Id
private int id;
@OneToMany(mappedBy = "post")
private List<Comment> comments;
}
// 多对一
@Entity
public class Comment {
@Id
private int id;
@ManyToOne
@JoinColumn(name = "post_id")
private Post post;
}
// 多对多
@Entity
public class User {
@Id
private int id;
@ManyToMany
@JoinTable(
name="user_role",
joinColumns={@JoinColumn(name="user_id")},
inverseJoinColumns={@JoinColumn(name="role_id")}
)
private Set<Role> roles;
}