JPA中的实体类可以使用哪些注解来定义关系映射?

JPA中的实体类可以使用以下注解来定义关系映射:

  1. @OneToOne:定义一对一关系,用于映射两个实体类之间的一对一关联。
  2. @OneToMany:定义一对多关系,用于映射一个实体类关联多个实体类。
  3. @ManyToOne:定义多对一关系,用于映射多个实体类关联一个实体类。
  4. @ManyToMany:定义多对多关系,用于映射多个实体类相互关联。
  5. @JoinColumn:用于定义两表之间的关联列。主要用于一对一和多对一关联关系。
  6. @JoinTable:用于定义中间表,主要用于多对多关联关系。
  7. @MappedSuperclass:用于定义父类实体,该实体的属性会映射到子类实体中。
  8. @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; 
}