Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:按示例查询相当于关联条件查询_Java_Hibernate_Hibernate Criteria_Query By Example - Fatal编程技术网

Java Hibernate:按示例查询相当于关联条件查询

Java Hibernate:按示例查询相当于关联条件查询,java,hibernate,hibernate-criteria,query-by-example,Java,Hibernate,Hibernate Criteria,Query By Example,我想根据关联相关对象的值在数据源中搜索所有对象实例。数据模型可以简化为:类型A的对象包含类型B的对象列表。目标是查找A中包含B的所有实例,以便B的属性值为X 我已经可以使用以下条件查询成功实现这一点: List<A> results = session.createCriteria(A.class) .createCriteria("listOfBs") .add(Restrictions.eq("propertyInB", x)) .list(); 列

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

我已经可以使用以下条件查询成功实现这一点:

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

我认为,以一种有效的方式展示我正在努力实现的目标,然后寻找等价物可能会有所帮助——这就是我提出这个问题的原因

简言之,我的问题是:如何在Hibernate中通过示例实现上述条件查询?我正在使用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"
要使用示例查询(QBE)实现上述查询,请执行以下操作:

/***使用要匹配的属性初始化类A的实例***/
A instanceA=新的A();
instanceA.setProperty1(“WW”);
instanceA.setProperty2(“xxxx”);
exampleA=Example.create(instanceA);
/***B班也一样**/
B instanceB=新的B();
instanceB.setProperty1(“yyyy”);
instanceB.setProperty2(“zzzz”);
exampleB=Example.create(instanceB);
/**创建并执行QBE***/
列表结果=session.createCriteria(A.class)
.添加(示例a)
.createCriteria(“b”,CriteriaSpecification.LEFT_JOIN)//b是类A的属性
.添加(示例B)
.list();

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

感谢您的回答。我尝试了这个方法,但遇到了与上一个问题相同的问题()-org.hibernate.QueryException:无法解析属性:_COMof B。您是否知道可能出现了什么问题?我现在不知道。通常,如果在代码中写入一些无效路径,例如
.createCriteria(“\u com”,CriteriaSpecification.LEFT\u JOIN)
,并且
\u com
不是实体的属性,则会出现
无法解析属性的情况。不幸的是,\u com不是我在任何地方定义的属性/字段,这对我都不起作用。此外,_com不是我的工作区中包含的任何库中存在的属性名称。。然而,这是医生建议我们为QBE所做的,所以我将把这标记为答案。。看来我得离开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();