今天在工作中碰到了一个问题
一个 实体类 User 关联了一个 权限表 Role
User 表 是这样的
public class User
private String userName; // 用户名
private String nickName; // 昵称
private String trueName; // 真实姓名
@ManyToMany(targetEntity = Role.class, fetch = FetchType.LAZY)
@JoinTable(name = Globals.DEFAULT_TABLE_SUFFIX + "user_role", joinColumns = {
@javax.persistence.JoinColumn(name = "user_id") }, inverseJoinColumns = {
@javax.persistence.JoinColumn(name = "role_id") })
private Set<Role> roles = new TreeSet();
public class Role
private String roleName; // 角色名称
private String roleCode; // 角色编码,根据该编码来识别角色
但是,我想查询的 某个权限,那些用户在使用,本来很简单的一个sql 语句可以解决的,但是使用了@JoinTable 导致了没有关联的实体类,去查询。
怎么解决了
"select u from User u join u.roles r where r.id="+roleId
(Set)和(List)都可以取集合中的元素,但用在where子句的条件是需要数据库支持子查询。
所以使用关联 查询,我们就可以查询出来了。
u.roles r 中的 r 意思就是 role 这个对象的别名,hibernate会翻译成两个表的内连接关系