HQL WHERE子句,其中条件位于哈希集或列表中

时间:2015-06-01 04:09:10

标签: java hibernate hql

您好我正在解决家谱问题。

我有一个POJO班级家庭

Public class Family {

 private int familyId;
 private Partners parents;
 private HashSet<Person> children;
 private HashSet<Family> descendantFamilies;
 //getters and setters.
 }

 public class Person {
  private int personId;
  private String name;
  private Gender gender; //Enum class

//getters and setters.
}

public class Partners {

private person husband;
private person wife;
//getters and setters
}

现在检查一个人是否有兄弟姐妹,我必须通过家庭检查那个人是该家庭的孩子之一。我是hibernate的新手。我从未通过列表或hashset搜索where条件。请帮忙。

1 个答案:

答案 0 :(得分:2)

您好我会尝试回答您的问题,因为我认为您正在寻找elements关键字。
您可以使用以下HQL 通过家庭检查该人是该家庭的孩子之一: -

select f 
FROM Family f 
WHERE (
  :person in elements(f.children)
)

此查询会将包含此人的家庭作为子项。语法可能类似于: -

 String hql = "select f FROM Family f  WHERE (:person in elements(f.children))";
 Query query = session.createQuery(hql);
 query.setEntity("person",somePersonObject);

此外,我认为您可能已经知道但仍想知道何时使用HashSet覆盖equals和hashcode方法很重要。喜欢定义两个人对象应该被认为是相等的(可能当有相同的时候)