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