java中hibernate的关联查询

[复制链接]
查看11 | 回复5 | 2011-3-28 11:00:04 | 显示全部楼层 |阅读模式
使用hibernate的HQL语句实现关联查询
表结构如下:
User表: uid(pk)uname
Role表: rid(pk)rname
UserRole表 : uid(fk)rid(fk)
查询某个User的所有Role
3张都是数据库里的表,UserRole表没有主键。
用的是MyEclipse里hibernate支持 自动生成的po类

回复

使用道具 举报

千问 | 2011-3-28 11:00:04 | 显示全部楼层
你在配置文件里要做相应many-to-many才会自动生成UserRole表,对吧。在领域模型里应该也在User和Role类里写了类似这样的语句:Set roles;所以查询某个User里的所有Role时,只需获得User的id,然后User user = xxxDao(或者Hibernate模板).load(User.class, id);然后Set roles = user.getRoles();就可以了。
回复

使用道具 举报

千问 | 2011-3-28 11:00:04 | 显示全部楼层
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没法测试,如果不能通过请留言!
回复

使用道具 举报

千问 | 2011-3-28 11:00:04 | 显示全部楼层
首先你是实体有问题,应该只有User和Role,不应该有UserRole
回复

使用道具 举报

千问 | 2011-3-28 11:00:04 | 显示全部楼层
首先,你要实现关联查询,这些表,肯定是要实现双向多对多的关系(many-to-many),然后,你说UserRole没有主键,那么使用MyEclipse自动生成的时候,就会创建两张表,一张里面是uid,另一张表里是别的字段,我之前做的项目里碰到过这种情况
回复

使用道具 举报

千问 | 2011-3-28 11:00:04 | 显示全部楼层
//多对多的关系,你在User类中,应该有roles属性吧,用来映射Role的public void queryById(int id){User user = (User)session.get(User.class,id);Set set = user.getRoles();for(Role role : set){
Sys
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行