HQL WHERE子句,条件在哈希集或列表中



你好,我正在解决一个家谱问题。

我有一个POJO类Family

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
}

现在检查一个人是否有兄弟姐妹,我必须检查那个人是那个家庭的孩子之一的家庭。我刚学会冬眠。我从来没有通过列表或哈希集搜索过where条件。请帮助。

你好,我试着回答你的问题,因为我认为你正在寻找元素关键字。
您可以通过使用以下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重写等号和hashcode方法是重要的。像定义两个人一样的对象应该被认为是相等的。(可能当id相同时)

最新更新