私はあなたがCriteria APIを使用していると仮定します。
あなたが休止状態のソースコードをチェックする場合は、ここで問題を見つけることができます:私は休止状態3.3.2使用してい
CriteriaQueryTranslator#createAssociationPathCriteriaMap()
private void createAssociationPathCriteriaMap() {
Iterator iter = rootCriteria.iterateSubcriteria();
while (iter.hasNext()) {
CriteriaImpl.Subcriteria crit = (CriteriaImpl.Subcriteria) iter.next();
String wholeAssociationPath = getWholeAssociationPath(crit);
Object old = associationPathCriteriaMap.put(wholeAssociationPath, crit);
if (old != null) {
throw new QueryException("duplicate association path: " + wholeAssociationPath);
}
int joinType = crit.getJoinType();
old = associationPathJoinTypesMap.put(wholeAssociationPath, new Integer(joinType));
if (old != null) {
// TODO : not so sure this is needed...
throw new QueryException("duplicate association path: " + wholeAssociationPath);
}
}
}
。内部で何が起こる
はあなたのルートにCriteria
Sを追加する場合Criteria
HibernateはSubCriteria
Sを作成し、後でMap
を使用しようとしているすべてのパスを(以下のコードをチェックしてください)埋めていることであり、重複を見つけた場合、それ例外がスローされます。
たとえば、参加しようとしている場合:entity0.entity1
以降では、再び参加しようとするとException
が返されます。これは、Hibernateがここでそれらを気にしないので、エイリアスでも動作しません。
何かを何度も参加させないか、HQL/JPQLを使うことができます。あなたは新しいバージョンのHibernateをチェックアウトするかもしれませんが、私がこれらの疑似バグを修正したかどうかは分かりません。
クエリのコードと例外のスタックトレースを表示します。 –
問題を解決しました。このリンクでは、下の "https://forum.hibernate.org/viewtopic.php?f=1&t=943274"に「OuterJoinLoaderに深い制限があり、同じ関連付けが2回行われないようにしています。それは私が知る上で重要でした。だから私はCriteria APIではなくHQLの問題を解決することに決めました。 – J3DI
あなたの質問にCriteria APIを使用していることが少なくとも記述されている場合、またはコードを表示していた場合はすぐにそのことを教えてください。 –