编程语言
首页 > 编程语言> > java – Hibernate:Query By Example等效的关联Criteria Query

java – Hibernate:Query By Example等效的关联Criteria Query

作者:互联网

我想根据关联相关对象的值搜索我的数据源中的所有对象实例.数据模型可以简化为:类型A的对象包含类型B的对象列表.目标是查找A的所有实例,其中A包含B,使得B具有属性值X.

我已经可以使用Criteria查询成功实现此目的,如下所示:

  List<A> results = session.createCriteria(A.class)
    .createCriteria("listOfBs")
    .add(Restrictions.eq("propertyInB", x))
    .list();

这是一种简化,B的多个属性将适用 – 搜索功能对于用户填充的过滤器是必需的.

我想通过示例查询替换这种方法 – 我只是创建一个具有所需参数的对象图.我在遵循Hibernate文档方面的尝试失败了,并在this question中进行了描述.

我认为以一种有效的方式展示我想要实现的东西,然后寻找等价物可能会有所帮助 – 这就是我重新提出这个问题的原因.

简而言之,我的问题是:如何在Hibernate中将上述Criteria Query实现为Query by Example?我正在使用Hibernate 3.6.6.

谢谢!

解决方法:

假设您想要执行以下操作:

Select a.* , b* 
from a join b on a.id = b.id 
where a.property1 = "wwww"
and a.property2="xxxx"
and b.property1="yyyy"
and b.property2="zzzz"

使用Query by Example(QBE)实现上述查询:

/***Initialize an instance of Class A with the properties that you want to match***/
A instanceA = new A();
instanceA.setProperty1("wwww");
instanceA.setProperty2("xxxx"); 
Example exampleA = Example.create(instanceA);

/***Do the same for the Class B**/
B instanceB = new B();
instanceB.setProperty1("yyyy");
instanceB.setProperty2("zzzz"); 
Example exampleB = Example.create(instanceB);

/**Create and execute the QBE***/
List<A> results = session.createCriteria(A.class)
    .add(exampleA)
    .createCriteria("b",CriteriaSpecification.LEFT_JOIN) // b is the property of Class A
    .add(exampleB)
    .list();

结果已经是fetch-joined,这意味着A中的集合实例B已经完全初始化.

标签:java,hibernate,hibernate-criteria,query-by-example
来源: https://codeday.me/bug/20190530/1185473.html