2011-07-08 1 views
6

を更新した後に失敗した、いくつかのクエリメッセージで失敗加入:「自動」、ネストされたエンティティのフェッチが(それは、JBoss 6へのJBoss 4.2.2からスイッチに付属していると思います)、新しいHibernateのバージョンにアップグレードした後にHibernate

Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=null,role=null,tableName= (...)

このようなクエリを使用するとき、これは常にそうである:

SELECT entityA FROM EntityA entityA 
JOIN FETCH entityA.entityB 
LEFT JOIN FETCH entityA.entityB.someField 
WHERE entityA.entityB.anotherField LIKE :someParameter 

問題を解決するには、「entityA.entityBに」エイリアスを与えるために、その後WHERE句で、このエイリアスを使用することです。しかし、いくつかのクエリでは、LEFT JOIN FETCHは明示的に与えられていませんが、依然としてWHERE句は参照先のエンティティのプロパティを使用します。それはまた失敗するでしょうか?何が変更されたので、新しいJBossバージョンに切り替えた後に突然失敗するのですか?

次のquestionは、この問題に関連しており解決策を含んでいますが、問題は説明していません。

+0

あなたの質問は、hibernate 3.2.6.gaから3.5.6にアップグレードした後、私の問題の解決策を見つけ出すのを助けました。 '指定されたクエリを取得しましたが、フェッチされた関連の所有者はあなたがそれがうまくいっていることを示唆したエイリアスアプローチを使用して、なぜ「なぜ」でもあなたを助けることができません! –

+0

はこのHQLまたは標準のJPQLですか? – wrschneider

+0

これは 'EntityManager.createQuery'を介して行われるので、HQLだと思います。 –

答えて

3

クエリがあるべき

SELECT entityA FROM EntityA entityA 
JOIN FETCH entityA.entityB entityB 
LEFT JOIN FETCH entityB.someField 
WHERE entityB.anotherField LIKE :someParameter 

すなわち、結合された各エンティティにエイリアスを割り当て、後続の結合または制限にこのエイリアスを使用する必要があります。

+0

ええ、私は知っている..しかし、それはいつもこのようになっています。そして、Hibernate 3から4への切り替えはどういうわけか受け入れを変え、これは私たちのために多くの移行作業を引き起こします。私はちょうど彼らが急にHibernateを短期間で下位互換性にすることを止めた理由を知りたがっていました。 –

+0

私の推測では、今修正されたHibernateのバグに頼って、あなたのコードが偶然に働いたと思います。 –

0

私はプロジェクトで同じ問題を抱えています。私はプリコンパイルされた名前付きクエリと多くのクエリを必要に応じて使用するモジュールがたくさんある大規模なレガシーシステムを持っているため、解決するのは非常に難しいです。古いバージョンのhibernateを使用してシステム全体を識別して変更したり、変更したりすることは、非常に厄介な作業であり、エラーを起こしやすい。 JBossでこの問題を6.4から6.4.6に、hibernateのバージョンを4.2.18から4.2.22にアップグレードすると、このエラーが表示されます。これを解決するために、私は、デフォルトのバージョン4.2.18に冬眠するメインモジュールだけをダウングレードしますが、これはうまくいかず、JBossの次のパッチが到着したらもう一度変更する必要があるからです。私はpersistence.xmlとjboss-deployment-strcuture.xmlでJBossモジュールといくつかの設定を使用しようとしていますが、まだ成功していません。

関連する問題