Hibernate:ManyToMany映射到OneToMany列表

时间:2015-12-16 16:23:41

标签: java hibernate

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

  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实现这一目标?

1 个答案:

答案 0 :(得分:1)

这看起来像下面的内容。您需要一个加入实体&#39; UserRole&#39;因为您在user_role表中记录了其他信息(given_by)。因此,您可以使用此第三个实体映射@ManyToMany,而不是在用户&lt;&gt;角色之间使用@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;
}