5

名前付きクエリのセットを持つJavaクラス(エンティティ)があります。Springが関連するBeanを注入しようとすると、クエリの1つが見つかりません。

例として:

@NamedQueries({
        @NamedQuery(name = "Query1", query = "..."),
        @NamedQuery(name = "Query2", query = "..."),
        @NamedQuery(name = "Query3", query = "..."),
        @NamedQuery(name = "Query4", query = "..."),
        @NamedQuery(name = "Query5", query = "...")
})

SpringがBeanを注入しようとすると、次のようになります。

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 ...

クエリは正しいと確信しています(それらのすべての単体テストに合格しています)。

誰かがそれの根本的な原因を知っていますか?

4

2 に答える 2

5
  • エンティティがマッピング/スキャンされていることを確認してください。で注釈が付けられているか、または関連するプロバイダー構成に追加されているか、または自動的にスキャンされていますか@Entitypersistence.xml

  • クラスの名前をクエリの前に付けます-つまりMyEntity.Query1MyEntity.Query1など。

  • 展開エラーがないかどうかを確認します。つまり、クエリが正しいことを確認します

于 2010-07-01T05:44:32.577 に答える
2

ええと、私はエラーがあります。何が起こっていたかは次のとおりです。

私のクラスには、@ Resourceで注釈が付けられた1つのメソッドがあり、@ Entityで注釈が付けられた別のクラスで宣言された名前付きクエリを呼び出しました)。

したがって、Springがメソッドを挿入して実行すると、名前付きクエリを使用しようとします。ただし、クエリは「使用する準備ができていません」。スローされる例外は、クエリが見つからなかったことです。

これを解決するには、Springインジェクションが終了したときに呼び出される別のメソッドを実行する必要があります。つまり、クラスはインターフェースorg.springframework.context.ApplicationListenerを実装する必要があり、メソッドonApplicationEventはorg.springframework.context.eventを待機します。 ContextRefreshedEventイベント。

それはすべての人です。助けてくれてありがとうBozho。

于 2010-07-02T18:50:51.010 に答える