【发布时间】:2021-02-01 08:04:39
【问题描述】:
在我的项目中,用户和角色之间存在多对多关系。出于这个原因,我还有新实体 UserRole 连接这两个实体。
看起来像这样:
用户:
@Data
@Entity
@Table(NAME = "USERS")
public class User {
@Id
@Column(name = "USER_ID")
private String userId;
@Basic
@Column(name = "EMAIL")
private String email;
@OneToMany(fetch = LAZY, mappedBy = "user")
private Set<UserRole> userRoles;
}
角色:
@Data
@Entity
@Table(NAME = "ROLES")
public class Role {
@Id
@Column(name = "ROLE_ID")
private String roleId;
@Basic
@Column(name = "NAME")
private String name;
@OneToMany(fetch = LAZY, mappedBy = "role")
private Set<UserRole> userRoles;
}
用户角色:
@Data
@Entity
@IdClass(UserRolePK.class)
@Table(NAME = "USER_ROLES")
public class UserRole {
@Id
@Column(name = "USER_ID")
private String userId;
@Id
@Column(name = "ROLE_ID")
private String roleId;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "USER_ID", insertable = false, updatable = false)
private User user;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "ROLE_ID", insertable = false, updatable = false)
private Role role;
}
在这种情况下,用户可以拥有多个角色。
问题:如何使用一个查询 (JPQL) 通过他的 id (userId) 获取所有分配给他的角色的用户?
我知道我可以先通过 id 获取用户,然后我可以根据 UserRole 表单独获取角色。
但我想在一个查询中做到这一点。我想要拥有角色列表的用户。
【问题讨论】:
-
你真的需要中间表
UserRole来实现User和Role之间的ManyToMany 关系吗?您还遇到了映射问题:您对User.userRoles和Role.userRoles使用相同的mappedBy = "user"。 -
@SternK 不幸的是我需要这张表,它是由其他人在数据库中创建的,我无法更改它。我会修复我的映射谢谢。
标签: java spring spring-data-jpa jpql hibernate-mapping