冬眠、重複した値を取得します
-
09-10-2019 - |
質問
私は非常に簡単なクエリを書いていますが、何らかの理由で重複した値を取得しています。
Criteria cr = session.createCriteria(ProcessInstance.class, "p")
.add(Restrictions.isNull("end"));
@Cleanup ScrollableResults sr = cr.scroll(ScrollMode.FORWARD_ONLY);
while (sr.next()) {
pi = (ProcessInstance) sr.get(0);
String id = pi.getId(); //Getting duplicate values
}
pi.getId()
重複した値を返します。つまり: *9,9,10,10,11,11 etc*
ただし、このクエリをMySQLで直接実行します
SELECT * FROM JBPM_PROCESSINSTANCE J where J.END_ IS NULL
重複した値を返しません。
誰もが何が悪いのかを見つけることができますか?
解決
速い回避策は、異なるルートエンティティ結果トランスを使用することです。
...
crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
List unique = crit.List();
...
しかし、これは回避的です。
問題はあなたのマッピングに属します。プロセスインスタンスから何か他のもの(xと呼ばれる)までの熱心なロードが1:n関係があり、1つのProcessInstanceにいくつかの(n)xがあります。プロセスインスタンス。 - これが本当に原因である場合、ワークアラウンドが単なる回答ではない場合、それは解決策になります。
他のヒント
私はあなたと同じ問題を取り入れます。
これが私がそれを解決する方法です。
Criteria cr = session.createCriteria(ProcessInstance.class, "p")
.add(Restrictions.isNull("end")).setProjection("id")
これにより、すべての基準を満たすすべてのIDが返されます。
あなたが使用した後にそこに In
制限と実行 CriteriaSpecification.DISTINCT_ROOT_ENTITY
.
結果を2番目の基準でスクロールできるようになります。これを願っています。
所属していません StackOverflow