简体   繁体   English

SQL和Hibernate使用连接表获取项目列表

[英]SQL & Hibernate Get a list of items with a join table

I am trying to get this logic from the database : 我试图从数据库中获取此逻辑:

Get Roles by their names, and only roles of users specified by userid entered on a form. 通过角色名称获取角色,并且仅获取由在表单上输入的userid指定的用户角色。

Tables : 桌子:

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

I did this in SQL like this : 我是这样在SQL中完成的:

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

but this returns only roles, not their ids which would be needed later to do a direct update of user roles 但这仅返回角色,而不返回其ID,以后直接进行用户角色更新将需要它们的ID。

when I do this : 当我这样做时:

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

It returns this : [[Ljava.lang.Object;@1e9b4920, [Ljava.lang.Object;@2e0670e5] 它返回以下内容: [[Ljava.lang.Object;@1e9b4920, [Ljava.lang.Object;@2e0670e5]

And can't get how to show the Object contained data, I tried with hibernate like this : 而且无法获取如何显示对象包含的数据,我尝试了这样的休眠模式:

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

It returns something like [User Object, Roles Object] which driven me to try it using an SQLQuery, but no chance .. 它返回类似[User Object,Roles Object]的内容,这促使我使用SQLQuery进行尝试,但是没有机会..

I think you can do like this: 我认为您可以这样做:

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

and get it like: 并得到像:

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

Then you can do your business by looping the list 然后,您可以通过循环列表来开展业务

Hope this help! 希望有帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM