在领域模型里应该也在User和Role类里写了类似这样的语句:
Set<Role> roles;
所以查询某个User里的所有Role时,只需获得User的id,然后
User user = xxxDao(或者Hibernate模板).load(User.class, id);
然后
Set<Role> roles = user.getRoles();
就可以了。
多对多需要一个关联表,你用的是注解,你可以在多的一方的另一方引用的list上面,
比如用户和角色,他们是多对多的关系,你可以写上:
/**user表中的其他的属性*/
@lazycollection(lazycollectionoption.false)
@manytomany()
@jointable(name = "tb_user_role", joincolumns = @joincolumn(name = "user_id"), inversejoincolumns = @joincolumn(name = "role_id"))
private list
这样就在数据库中创建了tb_user_role这个关联表,
然后在role这个实体类中也要配置一个多对多的关系。如下:
// 对应关联的用户集合
@manytomany(mappedby = "roles")
private list
这样就可以啦,
select distinct(r.rname) from User u,Role r,UserRole ur where u.uname='xxxx' and u.uid=ur.uid and ur.rid=r.rid
你试试我的语句能执行通过吗?我本机没配Hibernate没法测试,如果不能通过请留言!
首先你是实体有问题,应该只有User和Role,不应该有UserRole
首先,你要实现关联查询,这些表,肯定是要实现双向多对多的关系(many-to-many),然后,你说UserRole没有主键,那么使用MyEclipse自动生成的时候,就会创建两张表,一张里面是uid,另一张表里是别的字段,我之前做的项目里碰到过这种情况
//多对多的关系,你在User类中,应该有roles属性吧,用来映射Role的
public void queryById(int id){
User user = (User)session.get(User.class,id);
Set<Role> set = user.getRoles();
for(Role role : set){
System.out.println("用户:"user.getName() + "角色:" + role.getName());
}
}
亖呉?盀