Spring JpaRepository中的类似查询

147

我想在JpaRepository中编写一个LIKE查询,但它没有返回任何结果:

LIKE '%place%'-不起作用。

LIKE 'place'是完全正常的。

以下是我的代码:

@Repository("registerUserRepository")
public interface RegisterUserRepository extendsJpaRepository<Registration,Long> {

    @Query("Select c from Registration c where c.place like :place")
     List<Registration> findByPlaceContaining(@Param("place")String place);
}
16个回答

1

有多种方法可供选择。正如许多人所提到的,如果可能的话,您可以使用JPA预定义的模板查询。

List<Registration> findByPlaceContainingIgnoreCase(String place);

此外,在调用上述方法之前,您可以在Java层中附加“%”。

如果查询较为复杂,则通常可以使用@Query。

@Query("Select r from Registration r where r.place like '%' || :place || '%'")

为了提高可读性,您可以使用以下方式

@Query("Select r from Registration r where r.place like CONCAT('%', :place, '%'")

1

准确的答案将会是:

-->` @Query("select u from Category u where u.categoryName like %:input%")
     List findAllByInput(@Param("input") String input);

0

现在使用Spring Data JPA可以实现这一点。请查看http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#query-by-example

Registration registration = new Registration();
registration.setPlace("UK");

ExampleMatcher matcher = ExampleMatcher.matchingAll()
  .withIgnoreCase()
  .withStringMatcher(StringMatcher.CONTAINING);

Example<Registration> example = Example.of(registration, matcher);

List<Registration> registrationList = registerUserRepository.findAll(example);

0

你可以在参数后面简单地使用“Like”关键字。

List<Employee> findAllByNameLike(String name);

0

我们喜欢这样

@Query("from CasFhgDeviceView where deviceGroupName like concat(concat('%CSGW%', :usid), '%') ")


这个回答是否提供了比其他回答更多的信息?如果是,请[编辑]它并添加关于你的答案有助于解决什么问题的信息。如果不是,请删除你的答案。谢谢。 - Mark Stewart

0

找到了没有使用@Query的解决方案(实际上我尝试了多种方法,但都不起作用)。

必须返回Page<Entity>而不是List<Entity>

public interface EmployeeRepository 
                          extends PagingAndSortingRepository<Employee, Integer> {
    Page<Employee> findAllByNameIgnoreCaseStartsWith(String name, Pageable pageable);
}

IgnoreCase 部分对于实现这一点至关重要!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接