Hibernate:使用Sets中的Attribute值创建HQL查询

时间:2015-01-20 10:07:12

标签: java hibernate hql

我想创建一个可以访问一组spezified对象的属性的HQL查询,让我通过一个简短的例子来解释

班级组织

public class Organization ...{
    private int orgid;
    private Set<DomainValue> languages = new HashSet<language>(0);
    private Set<Address> adresses = new HashSet<Address>(0);
    ...
}

班级地址

public class Address  implements java.io.Serializable {
   private int addressId;
   private String city;
   private String postalCode;
   private String streetName;
   private String houseNumber;
   ...
}

语言

public class Orgunitlanguage  implements java.io.Serializable {
   private int orgLanguageId;
   private Orgunit orgunit;
   private Integer languageCd;
   ...
}

这些示例是工作hibernate POJO的代码片段。所以我的组织可以有多个地址和语言。

我希望用户指定搜索条件,但将其限制为各种类型之一,因此只有一种语言,一种邮政编码等。

让我们说用户希望英语组织的房子数量为22

所以我会建立一个像这样的hql查询:

"from organization o where o.languages.languageCd = 1 AND o.addresses.housenumber = 22"

嗯,这种工作(非法语法)如何以正确的方式访问这些集合?请记住,我想访问一个特定的属性,而不仅仅是整个对象(这非常简单)。

我似乎无法找到我理解的文档,所以稍微解释会很好。

1 个答案:

答案 0 :(得分:0)

查询集合的正确方法就像这样

from Organization o join o.languages l join o.addresses a where l.languageCd = 1 AND a.housenumber = 22

但是,此查询将返回至少一种语言languageCd = 1至少一个地址housenumber = 22的任何组织。它不会过滤掉不符合标准的语言和地址。请查看this answer以获取更多解释。