スプリングフレームワークで「名前の付いたクエリが見つかりません」を取得する
-
01-10-2019 - |
質問
名前付きクエリのセットを備えたJavaクラス(エンティティ)があります。スプリングが関連する豆を注入しようとするとき、クエリの1つを見つけることはありません。
例として:
@NamedQueries({
@NamedQuery(name = "Query1", query = "..."),
@NamedQuery(name = "Query2", query = "..."),
@NamedQuery(name = "Query3", query = "..."),
@NamedQuery(name = "Query4", query = "..."),
@NamedQuery(name = "Query5", query = "...")
})
春が豆を注入しようとすると、私は得られます:
org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'myBean': Injection of resource methods failed;nested exception is
java.lang.IllegalArgumentException: Named query not found: Query3 at ...
私は確かにクエリが正しいと確信しています(それらのすべてのユニットテストが合格しています)。
誰かがそれの根本原因を知っていますか?
解決 2
さて、エラーがあります。起こっていたことは次のとおりです。
私のクラスには、@Resourceが注釈された1つの方法があり、@Entityが注釈された別のクラスで宣言された名前のクエリと呼ばれます)。
したがって、スプリングがメソッドを注入して実行すると、名前付きクエリを使用しようとします。ただし、クエリは「使用できない」ものではなく、スローされた例外はクエリが見つからなかったことです。
これを解決するには、スプリングインジェクションが終了したときに呼び出される別の方法を実行する必要があります。つまり、クラスはインターフェイスorg.springframework.context.applicationlistenerを実装する必要があります。 contextrefreshedeventイベント。
それはすべての人です。あなたの助けをありがとうBozho。
他のヒント
エンティティがマッピング /スキャンされていることを確認してください。で注釈が付けられていますか
@Entity
, 、に追加されていますかpersistence.xml
または、関連するプロバイダーの構成に対して、または自動的にスキャンされますか。クラスの名前をクエリに接頭します-IE
MyEntity.Query1
,MyEntity.Query1
等展開エラーがないかどうかを確認します - つまり、クエリが正しいこと