私はhibernateとmysqlでspring-data-jpaを使用しています。"@Query"を指定せずにspring-data-jpaを使用すると、その名前に対して定義されたクエリがありません。
私は、次のエンティティ
package com.wayne.domain.player;
@Entity
@Table(name = "PLAYER")
@Getter
@Setter
@ToString
public class Player {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false)
private Long id;
@Column(name = "EMAIL")
private String email;
// ...
}
とリポジトリ持っている:私はプロジェクトをビルドして実行するとき
@Repository
public interface PlayerRepository extends JpaRepository<Player, Long> {
List<Player> findByEmail(String email);
}
、私は次のエラー取得しています:
java.lang.IllegalArgumentException: No query defined for that name [Player.findByEmail]
をが、 findByEmailメソッドは正常に動作します。
私はこのような「@query」アノテーションでメソッドを変更する場合:
@Repository
public interface PlayerRepository extends JpaRepository<Player, Long> {
@Query("select p from Player p where p.email = ?1")
List<Player> findByEmail(String email);
}
そこには例外はありません、とfindByEmail方法が正常に動作します。
私はspring-data-jpaが自動的にメソッド名からクエリを作成することを知っています。 しかし、なぜ "@Query"アノテーションのない例外がありますか?
おそらく 'findByEMAIL'ですか? – luk2302