ここで何が欠けているのかわかりません。私は次のようにクエリを実行しようとしています:
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();
'または'の両側を個別にクエリすると、正しい結果が得られます。しかし、上記のクエリ全体を実行すると、「または」の左側の結果が得られます。
何か助けてください?
さて、今私は私のコメントについてかなり確信しています...
問題はrelatedPost.creatorPerson
、内部結合(実際には2つでも)が発生するため、or
whenrelatedPost
またはrelatedPost.creatorPerson
isの正しい部分の結果が得られないことですnull
。いくつかの左結合を明示的に指定すると、結果が得られるはずです。
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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加