【发布时间】:2017-06-20 12:07:14
【问题描述】:
我刚刚开始使用 Spring JPA,并且正在查看我的同事编写的代码。 我看到他一直在使用以下代码使用用户名查找登录对象:
public interface LoginDao extends JpaRepository<Login, Long> {
@Query("SELECT u FROM Login u WHERE LOWER(u.username) = LOWER(:username)")
Login findByUsername(@Param("username") String username);
}
他不能像这样创建一个方法:
@GET
@Path("{username}")
public Login getOne(@PathParam("username") String username) {
Login login = loginDao.findOne(username);
if (login == null) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
} else {
return login;
}
}
使用@Query 而不是编写方法方法的根本优势是什么。还是我完全错了,两者都有不同的目的。
我个人不想在代码中编写查询。我认为将 java 与 sql 查询混合在一起会使代码看起来更难看。
我们的堆栈是 java、JPA、Jersey、JAX-RS、Postgreql、Spring Boot、Hibernate
问候
【问题讨论】:
-
该查询不仅仅只是一个简单的
findOne,在这种情况下它不会起作用,因为findOne需要一个id 而不是任意值。 -
我会更新我的问题,因为你是对的 findOne 只需要 id
标签: java spring hibernate spring-data-jpa jpql