Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.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
Hibernate 使用hql'或'_Hibernate_Hql - Fatal编程技术网

Hibernate 使用hql'或'

Hibernate 使用hql'或',hibernate,hql,Hibernate,Hql,我不知道我错过了什么。我正在尝试按如下方式运行查询: String query = "select e from Event e where (eventType.operation='LIKE' and relatedPost.creatorPerson.personId=:person1Id)" + " or (eventEntity.relatedEntity='PERSON' and eventType.operation='FOLLOW' and rel

我不知道我错过了什么。我正在尝试按如下方式运行查询:

String query = "select e from Event e where (eventType.operation='LIKE' and relatedPost.creatorPerson.personId=:person1Id)"
                + " or (eventEntity.relatedEntity='PERSON' and eventType.operation='FOLLOW' and relatedPerson.personId=:personId)"
                + " order by creationDate desc";
beginTx();
Query q = session.createQuery(query);
q.setInteger("personId", id1);
q.setInteger("personId1", id2);
List<Event> events = q.list();
commitTx();
当我分别查询“或”的每一面时,我会得到正确的结果。但当运行上述整个查询时,我只得到“or”左侧的结果


有什么帮助吗?

好的,现在我很确定我的评论

问题是relatedPost.creatorPerson将导致一个内部连接,实际上甚至是两个,因此当relatedPost或relatedPost.creatorPerson为空时,您将无法获得或的正确部分的任何结果。如果显式指定一些左连接,则应得到一个结果:

select e from Event e 
left join e.relatedPost as rp 
left join rp.creatorPerson as cp
where (eventType.operation='LIKE' and cp.personId=:person1Id) 
or (eventEntity.relatedEntity='PERSON' and eventType.operation='FOLLOW' and relatedPerson.personId=:personId) order by creationDate desc

好吧,现在我很肯定我的评论

问题是relatedPost.creatorPerson将导致一个内部连接,实际上甚至是两个,因此当relatedPost或relatedPost.creatorPerson为空时,您将无法获得或的正确部分的任何结果。如果显式指定一些左连接,则应得到一个结果:

select e from Event e 
left join e.relatedPost as rp 
left join rp.creatorPerson as cp
where (eventType.operation='LIKE' and cp.personId=:person1Id) 
or (eventEntity.relatedEntity='PERSON' and eventType.operation='FOLLOW' and relatedPerson.personId=:personId) order by creationDate desc

我猜relatedPost.creatorPerson将导致一个内部连接,实际上甚至是两个,因此,当relatedPost或relatedPost.creatorPerson为null时,您将无法获得或的正确部分的任何结果。事实上,我是hql新手,不知道如何修复它。但当我切换“或”的两边时,我仍然会得到左边的结果。如果我记得正确,您必须显式指定一个左连接:从事件e中选择e left join e.relatedPost作为rp left join rp.creatorPerson作为cp,其中eventType.operation='LIKE'和cp.personId=:person1Id或eventEntity.relatedEntity='PERSON'和eventType.operation='FOLLOW'和relatedPerson.personId=:personId order by creationDate desc我猜relatedPost.creatorPerson将导致一个内部连接,实际上甚至是两个,因此当relatedPost或relatedPost.creatorPerson为空时,您将不会得到任何结果去修理它。但当我切换“或”的两边时,我仍然会得到左边的结果。如果我记得正确,您必须显式指定一个左连接:从事件e中选择e left join e.relatedPost作为rp left join rp.creatorPerson作为cp,其中eventType.operation='LIKE'和cp.personId=:person1Id或eventEntity.relatedEntity='PERSON'和eventType.operation='FOLLOW'和relatedPerson.personId=:personId order by creationDate desc