java中hibernate的关联查询 20

使用hibernate的HQL语句实现关联查询表结构如下:User表:uid(pk)unameRole表:rid(pk)rnameUserRole表:uid(fk)rid... 使用hibernate的HQL语句实现关联查询
表结构如下:
User表 : uid(pk) uname
Role表 : rid(pk) rname
UserRole表 : uid(fk) rid(fk)
查询某个User的所有Role
3张都是数据库里的表,UserRole表没有主键。
用的是MyEclipse里hibernate支持 自动生成的po类
展开
 我来答
幽冥神者
2011-03-28 · TA获得超过3213个赞
知道大有可为答主
回答量:1953
采纳率:50%
帮助的人:1791万
展开全部
你在配置文件里要做相应many-to-many才会自动生成UserRole表,对吧。
在领域模型里应该也在User和Role类里写了类似这样的语句:
Set<Role> roles;
所以查询某个User里的所有Role时,只需获得User的id,然后
User user = xxxDao(或者Hibernate模板).load(User.class, id);
然后
Set<Role> roles = user.getRoles();
就可以了。
更多追问追答
追问
不,现在数据库里就有一张UserRole表。
这张表没有主键,怎么查出User呢
追答
你这如果连关联映射都没有,拿Hibernate的关联查询累死也查不出来啊。
你要是三个表都存在,但没有做关联,倒是可以写SQL查出来。
中文_CL
2011-03-28 · 超过11用户采纳过TA的回答
知道答主
回答量:36
采纳率:100%
帮助的人:13.4万
展开全部
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没法测试,如果不能通过请留言!
追问
不行 没办法执行,
UserRole这张表是数据库里的表。 他没有主键 只有2个外键。
用MyEclipse自动生成PO类后 他生成了2个文件 1个UserRole 一个UserRoleId文件 。
可以点出UserRoles.id.user
select distinct(r.rname) from Users u,Roles r,UsersRoles ur where u.id=1 and u.id=ur.id.users and ur.id.roles= r.id
追答
MyEclipse可以生成数据表UserRole的映射文件吧,我不太喜欢在Hibernate里建立表间关系
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ccae8d0
2011-03-28 · TA获得超过2186个赞
知道大有可为答主
回答量:3104
采纳率:0%
帮助的人:1495万
展开全部
首先你是实体有问题,应该只有User和Role,不应该有UserRole
追问
你的意思是说中间关系这个表 不用生成实体类和映射文件对吗, 
如果是这样的话 那怎么用hibernate操作这张表呢
追答
只要在User和Role把关系建成多对多,就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
刺丶_
2011-03-29 · 超过10用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:0
展开全部
首先,你要实现关联查询,这些表,肯定是要实现双向多对多的关系(many-to-many),然后,你说UserRole没有主键,那么使用MyEclipse自动生成的时候,就会创建两张表,一张里面是uid,另一张表里是别的字段,我之前做的项目里碰到过这种情况
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-31
展开全部
//多对多的关系,你在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());
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-11-28
展开全部
亲 竟然有表没主键。。 你门DBA喝醉了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式