JPA @Query注释似乎没有使用参数

时间:2017-11-26 20:06:59

标签: spring hibernate jpa

我有一个使用JPA / Hibernate作为实体管理/建模的Spring Boot应用程序。我有以下用户类:

@Entity
public class User {
    @Id
    private Long Id;

    private String name;
    //more fields, getters and setters below
}

我希望我的应用程序的用户能够按名称搜索用户。所以在我的存储库界面中,我有:

  public interface UserRepository extends JpaRepository<User, Long> {
       @Query(value = "SELECT u from User u WHERE lower(u.name) LIKE lower(:name)")
       List<User> findByNameLike(@Param(value="name") String nmae);
  }

然后在我的UserController中,我有:

@GetMapping(value = "/users/")
public @ResponseBody List<User> search(@RequestParam String name) {
    return this.userRepository.findByNameLike(name);
}

这总是返回一个空列表。我知道name参数正确进入。 此外,我知道它正在识别@Query注释,因为如果我将查询更改为类似

SELECT u FROM User u

它将返回给我所有用户。或者,如果我将其更改为

SELECT u from User u WHERE u.name = '%Bob%'

并从方法中删除参数,它将返回名称为Bob的所有用户。我尝试了其他查询变体,例如

SELECT u FROM User u WHERE lower(u.name) LIKE CONCAT('%', lower(:name), '%')
SELECT u FROM User u WHERE u.name = :name (even a simple equals doesn't work)

依此类推。我看到的每个来源,我复制的语法似乎都说我正确地编写了查询,所以我认为其他一些事情必须继续下去。 我也试过让Spring使用

为我生成查询
public List<User> findByNameLike(String name);
public List<User> findByNameContaining(String name);

它似乎也不起作用。任何帮助将在这里受到赞赏!

0 个答案:

没有答案