Hibernate:ManyToMany映射到OneToMany列表



我有三个表,我想将其中的所有数据映射到实体列表中,每个表都包含另一个实体的列表。

  user     user_role
 ┌─────┐1 ┌──────────┐   role
 │ id  ├──┤ user_id  │* ┌─────┐
 ├─────┤ *│ role_id  ├──┤ id  │
 │name │  ├──────────┤ 1├─────┤
 └─────┘  │ given_by │  │name │
          └──────────┘  └─────┘

我想把它的数据映射到UserWithRolesAndGivers的列表。实体如下。

public class UserWithRolesAndGivers {
  private String userName;
  private List<RoleAndGiver> roleAndGivers;
}
public class RoleAndGiver {
  private String roleName;
  private String givenBy;
}

如何使用hibernate实现这一点?

这看起来像下面的样子。在user_role表中记录附加信息(given_by)时,您需要一个Join实体"UserRole"。因此,与其在用户<>之间使用@ManyToMany使用第三个实体映射@OneToMany的角色。

@Entity
public class User{
    @Id
    private Long id;
    @Column(name = "name")
    private String name;
    @OneToMany(mappedBy = "user")
    public List<UserRole> userRoles;
}
@Entity
public class UserRole{
    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
    @ManyToOne
    @JoinColumn(name = "role_id")
    private Role role;
    @Column(name = "given_by")
    private String givenBy;
}
@Entity
public class Role{
    @Id
    private Long Id;
    @Column(name = "name")
    private String name;
    @OneToMany(mappedBy = "role")
    private List<UserRole> userRoles;
}

最新更新