Hibernate:使用集合中的属性值创建 HQL 查询
Hibernate: create HQL Query with Attribute values from Sets
我想创建一个 HQL 查询,它可以访问一组特定对象的属性,让我通过一个简短的例子来解释一下:
Class 组织
public class Organization ...{
private int orgid;
private Set<DomainValue> languages = new HashSet<language>(0);
private Set<Address> adresses = new HashSet<Address>(0);
...
}
Class地址
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;
...
}
这些示例是工作休眠 POJO 的代码片段。所以我有一个可以有多个地址和语言的组织。
我希望用户指定搜索条件,但将它们限制为每种搜索条件之一,因此只能使用一种语言、一种邮政编码等。
假设用户想要门牌号为 22 的英语组织
所以我会像这样构建一个 hql 查询:
"from organization o where o.languages.languageCd = 1 AND o.addresses.housenumber = 22"
好吧,那行不通(非法语法)我如何以正确的方式访问这些集?请记住,我想访问一个特定的属性,而不仅仅是整个对象(这真的很容易)。
我似乎找不到我理解的文档,所以稍微解释一下会很好。
查询集合的正确方法应该是这样的
from Organization o join o.languages l join o.addresses a where l.languageCd = 1 AND a.housenumber = 22
但是,此查询将return任何拥有至少一种语言且languageCd = 1
和至少一种 地址与 housenumber = 22
。它不会过滤掉不符合条件的语言和地址。检查 以获得更多解释。
我想创建一个 HQL 查询,它可以访问一组特定对象的属性,让我通过一个简短的例子来解释一下:
Class 组织
public class Organization ...{
private int orgid;
private Set<DomainValue> languages = new HashSet<language>(0);
private Set<Address> adresses = new HashSet<Address>(0);
...
}
Class地址
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;
...
}
这些示例是工作休眠 POJO 的代码片段。所以我有一个可以有多个地址和语言的组织。
我希望用户指定搜索条件,但将它们限制为每种搜索条件之一,因此只能使用一种语言、一种邮政编码等。
假设用户想要门牌号为 22 的英语组织
所以我会像这样构建一个 hql 查询:
"from organization o where o.languages.languageCd = 1 AND o.addresses.housenumber = 22"
好吧,那行不通(非法语法)我如何以正确的方式访问这些集?请记住,我想访问一个特定的属性,而不仅仅是整个对象(这真的很容易)。
我似乎找不到我理解的文档,所以稍微解释一下会很好。
查询集合的正确方法应该是这样的
from Organization o join o.languages l join o.addresses a where l.languageCd = 1 AND a.housenumber = 22
但是,此查询将return任何拥有至少一种语言且languageCd = 1
和至少一种 地址与 housenumber = 22
。它不会过滤掉不符合条件的语言和地址。检查