首页 > 解决方案 > 如何查询可能未输入参数的对象列表?

问题描述

我正在尝试查询由用户可能根本没有输入的参数过滤的对象列表。

@Query(value = "SELECT  * " +
        "FROM project  " +
        "WHERE CASE WHEN (:location is not null) THEN location_Id LIKE :location" +
        " and CASE WHEN (:category is not null) THEN category_Id LIKE :category", nativeQuery = true)
List<Project> getProjects(@Param("category") List<Category> category,
                          @Param("location") List<Location> location);

但是我不断收到类似的错误,即我的语法错误,即使我只是从教程中复制了它。知道我可能在哪里弄错了吗?

标签: mysqlsqlhibernatespring-bootparameters

解决方案


如果你想要一个查询:

WHERE (:location is null OR location_Id LIKE :location) AND
      (:category is null OR category_Id LIKE :category)

从性能的角度来看,OR可能会扼杀性能(通过阻止使用可用索引)。通常应用程序为非参数值构建WHERE子句。NULL


推荐阅读