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类 展开
表结构如下:
User表 : uid(pk) uname
Role表 : rid(pk) rname
UserRole表 : uid(fk) rid(fk)
查询某个User的所有Role
3张都是数据库里的表,UserRole表没有主键。
用的是MyEclipse里hibernate支持 自动生成的po类 展开
6个回答
展开全部
你在配置文件里要做相应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();
就可以了。
在领域模型里应该也在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查出来。
展开全部
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没法测试,如果不能通过请留言!
你试试我的语句能执行通过吗?我本机没配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里建立表间关系
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你是实体有问题,应该只有User和Role,不应该有UserRole
追问
你的意思是说中间关系这个表 不用生成实体类和映射文件对吗,
如果是这样的话 那怎么用hibernate操作这张表呢
追答
只要在User和Role把关系建成多对多,就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先,你要实现关联查询,这些表,肯定是要实现双向多对多的关系(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());
}
}
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喝醉了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询