【发布时间】:2020-11-12 05:33:15
【问题描述】:
我正在用 Spring-Boot 测试 Spring-Data-JPA,使用的是 hibernate-core 5.4.2.Final 版本。
例如,我有一个 Users 表,其中包含 address 和其他列。
我的这个表的仓库界面如下。
public interface UsersRepository extends JpaRepository<Users, Integer> {
List<Users> findByAddressContaining(String keyword)
}
据我所知,如果我像我一样命名方法,将执行下面的查询。
SELECT * FROM Users u WHERE address LIKE '%keyword%';
问题是,这部分有效。
例如users表中有两个数据,每个数据的地址为“abc”和“cde”。
如果我测试findByAddressContaing("abc"),List<> 的结果大小为 2。
如果我运行findByAddressContaining("de") 之后,结果应该是 1,但它是 2。
如果我再次运行相同的方法findByAddressContaining("de"),则结果变为1。
我找不到解决这个问题的方法。任何的意见都将会有帮助。 :)
问题不在于 Spring-Data-JPA,而在于请求参数。
这是我的控制器方法。
@GetMapping("/v2/warehouses")
public void getAllWarehouses(@RequestParam(name = "address") String address,
@RequestParam(name = "limit") Integer limit,
@RequestParam(name = "offset") Integer offset,
HttpServletResponse response) {
System.err.println("Request Param Address : " + address");
如果我使用 Postman 将请求发送到正确的路径,有时地址会显示为空白。("")
这种情况正常吗??
【问题讨论】:
-
请展示一个完整的代码示例,包括插入数据和查询方法,以及初始查询表明数据库为空。
-
尝试打印翻译后的 SQL 查询以便检查。将这些添加到您的属性文件中:
logging.level.org.hibernate.SQL=DEBUG和logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE -
@JensSchauder 完整的代码相当复杂,所以我做了一个示例代码,所以我可以简单地说一下。
标签: spring-boot spring-restcontroller http-request-parameters