【问题标题】:Multiple criteria search using Hibernate使用 Hibernate 进行多条件搜索
【发布时间】:2013-05-26 15:45:24
【问题描述】:

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

以下是我的用户对象:

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 表,用于管理 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 来完成?请通过发布示例或指向示例链接来帮助我!

谢谢!

【问题讨论】:

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


    【解决方案1】:

    尝试改变这一行:

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

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

    附:同时删除= new HashSet(0)

    【讨论】:

    • 不幸的是,这不起作用。我仍在检索一个空列表。
    猜你喜欢
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多