Java &引用;“没有为该名称定义查询”;使用spring数据jpa而不使用“时发生异常”@查询「;

Java &引用;“没有为该名称定义查询”;使用spring数据jpa而不使用“时发生异常”@查询「;,java,spring,hibernate,spring-data-jpa,Java,Spring,Hibernate,Spring Data Jpa,我将SpringDataJPA与hibernate和mysql一起使用 我有以下实体 package com.wayne.domain.player; @实体 @表(name=“PLAYER”) @吸气剂 @塞特 @托斯特林 公开课选手{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) @列(name=“ID”,nullable=false) 私人长id; @列(name=“EMAIL”) 私人字符串电子邮件; // ... } 和存储库: @

我将SpringDataJPA与hibernate和mysql一起使用

我有以下实体

package com.wayne.domain.player;
@实体
@表(name=“PLAYER”)
@吸气剂
@塞特
@托斯特林
公开课选手{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“ID”,nullable=false)
私人长id;
@列(name=“EMAIL”)
私人字符串电子邮件;
// ...
}
和存储库:

@存储库
公共接口PlayerRepository扩展了JpaRepository{
列出findByEmail(字符串电子邮件);
}
当我构建并运行项目时,会出现以下错误:

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);
}
@存储库
公共接口PlayerRepository扩展了JpaRepository{
@查询(“从播放器p中选择p,其中p.email=?1”)
列出findByEmail(字符串电子邮件);
}
也不例外,findByEmail方法工作正常

我知道SpringDataJPA会根据方法名自动创建查询。
但为什么没有“@Query”注释会出现异常

这可能只是Spring数据模块中的一个小错误,代码如何处理查询查找策略的默认设置,或者您在
@EnableJpaRepositories
注释中调整了策略

无论哪种方式,文档都说默认值是
CREATE\u IF\u NOT\u FOUND
,它结合了
CREATE
USE\u DECLARED\u QUERY
。首先,它根据指定的方法名查找已声明的
@NamedQuery
,如果找不到,则委托创建一个新的查询

我想知道(我没有直接查看代码)当
USE\u DECLARED\u QUERY
基于默认设置Spring data uses失败时,异常是否作为逻辑的一部分被抛出、记录和捕获,以知道委托给
CREATE
选项


引入
@Query
注释的原因解决了这一问题,因为这改变了策略行为,使其仅使用
CREATE
,因此生成了一个名为
@Query

的查询。您可能希望添加一个无参数构造函数,或者使用Lombok的注释,以便它为您生成一个。确保Lombok按预期工作,我在尝试让它与STS一起工作时遇到了问题。

也许
findByEMAIL
?@jun,你能找到一个不涉及使用
@Query
的解决方案吗?