使用Hibernate进行多个条件搜索

时间:2013-05-30 22:22:50

标签: hibernate many-to-many hql hibernate-criteria

我正在设置搜索功能,以便我找到具有特定技能的用户。

以下是我的用户对象:

public class User {
  private int id;
  private String email;
  private String name;
  private Set userSkills = new HashSet(0);

  -- getters/setters --
}

以下是技能对象:

public class Skill {
  private int id;
  private String skillName;

  -- getters/setters --
}

最后是UserSkill对象,它映射到user_skill表,用于管理用户和技能之间的多对多关系

public class UserSkill {
  private int id;
  private int userId;
  private int skillId;

  -- getters/setters --
}

现在要求查找已订阅技能ID 13,29和31的用户列表。

我的尝试如下:

Query q = session.createQuery(
                "from User as user " +
                "left join fetch user.userSkills as us " +
                "where us.skill = 13 AND us.skill = 29 AND us.skill = 31");

        list = (ArrayList<User>) q.list();

上述内容不起作用,因为返回的列表始终为空,尽管有用户订阅了ID为13,29和31的技能。

有人可以建议正确的HQL,或者是否应该使用Hibernate Criteria API来完成?请通过发布示例或指向我的示例链接来帮助我!

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试更改此行:

where us.skill = 13 AND us.skill = 29 AND us.skill = 31

where us.skillId in (13,29,31)

P.S。同时删除= new HashSet(0)