用户登录
用户注册

分享至

hibernate关联id问题

  • 作者: 亖呉?盀
  • 来源: 51数据库
  • 2021-01-02
你在配置文件里要做相应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();
就可以了。



  多对多需要一个关联表,你用的是注解,你可以在多的一方的另一方引用的list上面,
比如用户和角色,他们是多对多的关系,你可以写上:
/**user表中的其他的属性*/
@lazycollection(lazycollectionoption.false)
@manytomany()
@jointable(name = "tb_user_role", joincolumns = @joincolumn(name = "user_id"), inversejoincolumns = @joincolumn(name = "role_id"))
private list roles;

这样就在数据库中创建了tb_user_role这个关联表,

然后在role这个实体类中也要配置一个多对多的关系。如下:
// 对应关联的用户集合
@manytomany(mappedby = "roles")
private list users;

这样就可以啦,




  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());
}

}
软件
前端设计
程序设计
Java相关