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歳のように説明してください! ;)
これは、次の投稿で説明されているIDEエラーです。
当面は、preferences/spring/project validators/Data validatorの検証をオフにすることができます無効な派生クエリそしてSTSはもうマーカーを投げません。
Spring Forumの post で、Springチームは、
STS 3.3.0ではすでに修正されています。
このバージョンはまだ確認していません。しかし、私は3.5.0.RELEASEを使用していますが、問題が再発します!私の修正は、チェックを外すことです無効な派生クエリ
これには回避策もあります。 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で確認しました。
私はこれを自分で試してみました。残念ながら、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を指定することです。