【问题标题】:Spring Data JPA returning wrong resultsSpring Data JPA 返回错误结果
【发布时间】: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&lt;&gt; 的结果大小为 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=DEBUGlogging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
  • @JensSchauder 完整的代码相当复杂,所以我做了一个示例代码,所以我可以简单地说一下。

标签: spring-boot spring-restcontroller http-request-parameters


【解决方案1】:

所以基本问题不在于@RequestParam 注释,而在于application.properties 文件。

在我将server.tomcat.uri-encoding=UTF-8 添加到属性文件后,该错误不再发生。

谢谢!

【讨论】:

    猜你喜欢
    • 2017-08-29
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2015-09-09
    • 2023-03-12
    • 1970-01-01
    • 2020-09-21
    相关资源
    最近更新 更多