Hibernate many-to-many的查询

有三个表user,role,user_role.user和role通过user-role进行多对多关联, user类role类,及映射文件如下 import java.util.*; public class User implements java.io.Serializable { private int id; private String username; private Set SetOfUserRole; private void setId (int id) { this.id = id; } public int getId() { return id; } public void setUsername(String name) { this.username = name; } public String getUsername() { return username(); } public Set getSetOfUserRole () { return this.SetOfUserRole; } public void setSetOfUserRole (Set SetOfUserRole) { this.SetOfUserRole = SetOfUserRole; } } public class Role implements java.io.Serializable { private int id; private String rolename; private Set SetOfUserRole; private void setId (int id) { this.id = id; } public int getId() { return id; } public void setRolename(String name) { this.rolename = name; } public String getRolename() { return rolename(); } public Set getSetOfUserRole () { return this.SetOfUserRole; } public void setSetOfUserRole (Set SetOfUserRole) { this.SetOfUserRole = SetOfUserRole; } } <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- Auto-generated mapping file from the hibernate.org cfg2hbm engine --> <class name="User" table="user" schema="dbo" lazy="false" > <id name="Id" type="int" > <column name="id" not-null="true" unique="true" /> <generator class="identity" /> </id> <property name="username" type="java.lang.String" > <column name="user_name" length="20"/> </property> <set name="SetOfUserrole" table="user_role" lazy="true" inverse="false" cascade="save-update" > <key> <column name="user_id" length="10" /> </key> <many-to-many class="Role" column="role_id" outer-join="auto" /> </set> </class> </hibernate-mapping> <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- Auto-generated mapping file from the hibernate.org cfg2hbm engine --> <class name=Role" table="role" schema="dbo" lazy="false" > <id name="Id" type="int" > <column name="id" not-null="true" unique="true" /> <generator class="identity" /> </id> <property name="username" type="java.lang.String" > <column name="role_name" length="20"/> </property> <set name="SetOfUserrole" table="user_role" lazy="true" inverse="false" cascade="save-update" > <key> <column name="role_id" length="10" /> </key> <many-to-many class="User" column="user_id" outer-join="auto" /> </set> </class> </hibernate-mapping> 我想查找roleid为1,2,3的用户,并且按用户名排序,如何用hql查询?

select user from User as user left join user.SetOfUserRole as role where role.id in (1,2,3) order by user.username

其实就是把set可以当作set中的对象来读取

经验分享 程序员 微信小程序 职场和发展