web-dev-qa-db-ja.com

STS 3.1のSpring Data JpaRepositoryインターフェースのいたるところで「無効な派生クエリ」エラーを取得する

Spring Dataのドキュメントに示されているとおりにリポジトリを実装しました。 STS 2.9からSTS 3.1にアップグレードするまで、すべてが順調でした。これらのエラーを解消しようとする試みはすべて失敗し、場合によっては意味がありません!それらは、インターフェイスまたは使用されているエンティティのいずれのプロパティとも一致しません!

次に例を示します。

public interface CreditNotesRepository extends JpaRepository<CreditNotes, Long> {

    CreditNotes findCurrentCreditNotes(Long shipmentDetailId);
}

findCurrentCreditNotesは、エンティティ内の名前付きクエリです。このコードは完全に正常に実行されます。

@NamedQueries({
    @NamedQuery(name = "CreditNotes.getCount", query = "SELECT COUNT(f) FROM CreditNotes f"),
    @NamedQuery(name = "CreditNotes.findCurrentCreditNotes", query =
        "SELECT creditNotes FROM CreditNotes creditNotes"
        + " WHERE creditNotes.shipmentDetail.shipmentDetailId = ?1 "
        + " AND creditNotes.notesSeqNumber =  (SELECT max(creditNotes2.notesSeqNumber) FROM CreditNotes creditNotes2"
        + " WHERE creditNotes.shipmentDetail.shipmentDetailId = creditNotes2.shipmentDetail.shipmentDetailId)")
})

そして私たちが得るエラー:

Invalid derived query! No property find found for type ca.cole.freight.model.CreditNotes

これは単なるフラグですが(コンパイルには影響しません)、煩わしく混乱します。誰でもこれに光を当てることができますか?そして、私が6歳のように説明してください! ;)

23
skel625

これは、次の投稿で説明されているIDEエラーです。

http://forum.springsource.org/showthread.php?138585-Invalid-derived-query!-No-property-delete-found-for-type-Java-lang-Object

当面は、preferences/spring/project validators/Data validatorの検証をオフにすることができます無効な派生クエリそしてSTSはもうマーカーを投げません。

26
Grubhart

Spring Forumの post で、Springチームは、

STS 3.3.0ではすでに修正されています。

このバージョンはまだ確認していません。しかし、私は3.5.0.RELEASEを使用していますが、問題が再発します!私の修正は、チェックを外すことです無効な派生クエリ

Invalid Derived Query

32
Tuan

これには回避策もあります。 JPQL/SQLクエリが定義されていないリポジトリのメソッド定義に@Queryアノテーションを追加します。

ここに例があります:

@Query
List<OwnerModel> findByFirstNameAndAgeNotZero(@Param(value = "firstName") String firstName);

この場合、クエリOrderModel.findByFirstNameAndAgeNotZeroという名前が使用されます。 @Tuan Dangが説明するように、EclipseエラーInvalid derived queryも検証を無効にする必要なしに消えます。

@NamedQueryおよび@NamedNativeQuery用のSpringプラグインがインストールされたEclipse 4.5.1で確認しました。

14
Paweł Dulęba

私はこれを自分で試してみました。残念ながら、Spring Dataの実装は1.1と1.2の間で変更されました。 <repository> XML宣言はサポートされなくなりました。カスタムPostfixを設定できますが、デフォルトでは、クラス名<InterfaceName>ImplのBeanが必要です。カスタムリポジトリの実装が見つからない場合は、発生しているようなエラーが発生し始めます。インターフェイスのメソッド名に基づいてオブジェクトをクエリするメソッドを作成しようとしています。

別の方法は、Spring Dataのバージョンを1.1に戻し、XMLでhttp://www.springframework.org/schema/data/jpa/spring-jpa-1.1.xsdのschemalocationを指定することです。

0
Apropos