我有三个表,我想将其中的所有数据映射到实体列表中,每个实体包含另一个实体的列表。
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实现这一目标?
答案 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;
}