关于hibernate多对多中间表的查询
user和role是多对多的关系,他们产生了个中间表userRole。user的属性有userId,userName等等,role的属性有id,name。userRole...
user和role是多对多的关系,他们产生了个中间表userRole。user的属性有userId,userName等等,role的属性有id,name。userRole有两个属性,一个是user_id对应user的userId,一个是role_id对应的是role的id。
我是用的反向工程,生产的POJO类一共有四个。User.java对应user表,Role.java对应role表。还产生了一个UserRoleId.java,里面有两个属性:user和role。UserRole.java里面只有一个属性:返回值为UserRoleId的id。
现在我知道一个确切的userId的值,想要运用HQL查询对应的一条中间表的记录。我是这么写的:
this.getHibernateTemplate.find("from UserRole as a where a.id.user.userId = ?",userId);可是查询到的却是空值,哪位高手可以告诉我应该如何操作呢?感激不尽,3Q~~ 展开
我是用的反向工程,生产的POJO类一共有四个。User.java对应user表,Role.java对应role表。还产生了一个UserRoleId.java,里面有两个属性:user和role。UserRole.java里面只有一个属性:返回值为UserRoleId的id。
现在我知道一个确切的userId的值,想要运用HQL查询对应的一条中间表的记录。我是这么写的:
this.getHibernateTemplate.find("from UserRole as a where a.id.user.userId = ?",userId);可是查询到的却是空值,哪位高手可以告诉我应该如何操作呢?感激不尽,3Q~~ 展开
2个回答
展开全部
多对多中间表一般不用这种处理方式,首先中间表是没有唯一的主键作为标识,更新信息的时候,hibernate可能出现错误更新或者异常。
通常反向工程的时候不选择中间表,next以后勾选一个many-to-many的选项(让myeclimpse自动去嗅探多对多关系,然后分解成2个一对多的关系)。生成的pojo类里面就会比原有的pojo类多一个集合。比如,User类里面会有一个Role类的set集合,Role类里面有一个User类的set集合。
直接用hibernate获取到指定的user,程序里面foreach迭代一下set集合,OK....
建议LZ去补下hibernate里面有关级联的知识。
通常反向工程的时候不选择中间表,next以后勾选一个many-to-many的选项(让myeclimpse自动去嗅探多对多关系,然后分解成2个一对多的关系)。生成的pojo类里面就会比原有的pojo类多一个集合。比如,User类里面会有一个Role类的set集合,Role类里面有一个User类的set集合。
直接用hibernate获取到指定的user,程序里面foreach迭代一下set集合,OK....
建议LZ去补下hibernate里面有关级联的知识。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询