私は、Spring JPAとリポジトリに関するものは初めてです。たくさんのフィールドが含まれるAuctionクラスがあり、フィールドの1つはカテゴリです。 CrudRepositoryのカスタムメソッドで結果をCategory.nameでフィルター処理したいのですが、
@XmlRootElement
@Entity(name="AUCTION")
public class Auction implements Serializable{
private static final long serialVersionUID = 1L;
@Id
String id;
@Column
@Size(min=5, max=200)
String title;
String description;
@OneToOne(cascade={CascadeType.ALL})
Category category;
....}
カテゴリー
@Entity(name="CATEGORY")
//@NamedQuery(name="Category.findByName", query="select c from Category c where c.name=:name")
public class Category implements Serializable{
private static final long serialVersionUID = 3L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
public Category()
{
}
オークションリポジトリで、次のようなメソッドを追加しました
@Repository
public interface AuctionRepository extends CrudRepository<Auction, String>{
@Query("from Auction a join a.category c where c.name=:categoryName")
public Iterable<Auction> findByCategory(String categoryName);
}
エラーをスローします。この方法を省略すると、すべてが正常に動作します。このタイプのカスタムメソッドはCrudRepositoryで宣言でき、SpringはmethodNameと指定したクエリヒントを使用して適切な処理を行うと誰かが言った。誰かが私を正しい方向に向けることができますか?.
クエリで参照できるように、@Param
アノテーションをメソッド変数名に追加する必要があります。あなたが書いたコードは全く問題ありません。 EntityManager
へのアクセスが必要な場合は、カスタムリポジトリが必要になります。
@Query("from Auction a join a.category c where c.name=:categoryName")
public Iterable<Auction> findByCategory(@Param("categoryName") String categoryName);
Java 8を使用して@Param
でコンパイルする場合、-parameters
は省略できます。
お役に立てば幸いです。
ヒント:質問を投稿するときは常に例外の詳細も投稿してください。問題の理解に役立ちます。