SQL& Hibernate获取带有连接表的项目列表

时间:2015-09-22 01:58:44

标签: java mysql hibernate

我试图从数据库中获取这个逻辑:

按名称获取角色,并且只在表单上输入userid指定的用户角色。

表格:

Roles [ idrole, role]
User [iduser, ...]
User_Roles [iduser, idrole]

我在SQL中这样做了:

Query query = getSessionFactory().getCurrentSession().createSQLQuery("SELECT role FROM roles WHERE idrole IN (SELECT idrole FROM User_Roles WHERE iduser = :Iduser)").setParameter("Iduser", iduser);

但这只会返回角色,而不会返回以后需要直接更新用户角色的ID

当我这样做时:

Query query = getSessionFactory().getCurrentSession().createSQLQuery("SELECT role, idrole FROM roles WHERE idrole IN (SELECT idrole FROM User_Roles WHERE iduser = :Iduser)").setParameter("Iduser", iduser);

它返回:[[Ljava.lang.Object;@1e9b4920, [Ljava.lang.Object;@2e0670e5]

并且无法获得如何显示Object包含的数据,我尝试了这样的hibernate:

Query query = getSessionFactory().getCurrentSession().createQuery("from Role r INNER JOIN r.userRoles a where a.iduser  = :Iduser").setParameter("Iduser", iduser);

它返回类似[User Object,Roles Object]的东西,它驱使我尝试使用SQLQuery,但没有机会......

1 个答案:

答案 0 :(得分:0)

我认为你可以这样做:

Query query = getSessionFactory().getCurrentSession().createSQLQuery("FROM roles WHERE idrole IN (SELECT idrole FROM User_Roles WHERE iduser = :Iduser)").setParameter("Iduser", iduser);

并得到它:

List<Roles> all = (List<Roles>)query.list();

然后,您可以通过循环列表来开展业务

希望这有帮助!