Hibernate:使用HibernateTempate映射和取消映射的内部联接表
我有以下表格:Hibernate:使用HibernateTempate映射和取消映射的内部联接表,hibernate,many-to-many,Hibernate,Many To Many,我有以下表格: 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 我使用注释将DB表映射到我的类 /* Mapping for USER table */ @Entity @Table (name="USER") public
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
我使用注释将DB表映射到我的类
/* 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;
}
如何在hibernate中使用HibernateTemplate执行此操作?非常简单:
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
谢谢你的快速回复,但是这些答案会给我一个基于用户的角色集合。如果你不明白的话,我会编辑这篇文章并添加一些信息。谢谢
select distinct role from User user
inner join user.roles role
where role.id = :roleId