我有以下表格:
USER
ID VARCHAR(32) INTEGER NOT NULL
ROLE
ID INTEGER NOT NULL
USERROLE /*Many to Many*/
USER_ID VARCHAR(32) NOT NULL
ROLE_ID INTEGER NOT NULL
我正在使用注释将数据库表映射到我的类。
/* Mapping for USER table */
@Entity
@Table (name="USER")
public class User{
@Id
@Column (name="ID")
private String id;
@ManyToMany
@JoinTable (name="USERROLE", joinColumns = {@JoinColumn (name="USER_ID")},
inverseJoinColumns = {@JoinColumn (name="ROLE_ID")})
@LazyCollection (LazyCollectionOption.FALSE)
private List<Role> roles;
}
/* Mapping for ROLE table */
@Entity
@Table (name="ROLE")
public class Role {
@Id
@Column (name="ID")
private int id;
}
现在我想进行一个连接ROLE和USERROLE表的查询,这样我就可以获得那些已经分配给用户的ROLE。
- 编辑
我有Role.id,我想检查USERROLE表中是否引用了此角色。在本机SQL中,我会这样做:
SELECT DISTINCT A.* from ROLE A INNER JOIN USERROLE B
WHERE A.ID = B.ROLE_ID AND A.ID = ?;
如何使用HibernateTemplate在hibernate中执行此操作?
答案 0 :(得分:1)
这很简单:
select role from User user inner join user.roles role where user.id = :userId
甚至更简单,没有任何疑问:
User user = (User) session.get(User.class, userId);
return user.getRoles();
编辑:要知道某个角色是否被至少一个用户引用,您可以使用以下查询,这与您的SQL查询非常相似:
select distinct role from User user
inner join user.roles role
where role.id = :roleId