【发布时间】:2017-05-22 23:23:37
【问题描述】:
我在春天做一个虚拟项目来记住旧技能。我已经实现了以下存储库。
用户存储库
@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,我已经使用这个框架开发了一些小项目,并且我使用了正常的方法没有任何问题。我已阅读文档试图找到对此的解释,但我没有找到任何解释。
- 谁能向我解释为什么我的第一次尝试没有成功?
【问题讨论】:
-
你的 User 类是什么样子的?
-
我已经编辑了我的主要帖子。
-
假设 JPA Query 方法与 POJO
User相关。查看documentation了解更多详情。 -
我在实体中也有这个:@NamedQuery(name = "User.findByEmail", query = "SELECT u FROM User u WHERE u.email = :email")
标签: java spring spring-boot repository spring-data-jpa