[英]Java repository - Spring Data JPA
我在春季做一个虚拟项目,以记住旧技能。 我已经实现了以下存储库。
用户存储库
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByUuid(String uuid);
User findByEmail(String email);
@Override
List<User> findAll();
}
带有getter和setter的用户实体 ,为清楚起见已删除
@NamedQueries({
@NamedQuery(name = "User.findByEmail", query = "SELECT u FROM User u WHERE u.email = :email")})
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(nullable = false)
private Long id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 64)
@Column(nullable = false, length = 64)
private String uuid;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 128)
@Column(nullable = false, length = 128)
private String username;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 128)
@Column(nullable = false, length = 128)
private String email;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 64)
@Column(nullable = false, length = 64)
private String password;
}
运行项目并使用查询findByEmail
后,出现以下错误:
java.lang.IllegalArgumentException:该位置为[1]的参数不存在
因此,我已经为我的问题搜索了一些可能的解决方案,并实际上找到了一个。 将查询替换为:
User findByEmail(@Param("email") String email);
这不是我第一次尝试Spring,而是使用此框架开发了一些小型项目,并且我使用正常方法也没有任何问题。 我已经阅读了文档,试图找到对此的解释,但是我没有找到任何解释。
请参阅以下吉拉票DATAJPA-733
从奥利弗·吉尔克(Oliver Gierke)
仅当您使用启用了-parameters的Java 8进行编译,或者在参考方法文档中对查询方法参数使用@Param批注时,才可以在查询中使用命名参数。 进行必需注释的原因是,在Java 8之前,无法将变量名称保留在接口方法的代码中。
提供的解决方法是删除命名查询
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.