我正在尝试查询由用户可能根本无法输入的参数过滤的对象列表。
@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);
但是我仍然遇到类似的错误,即使我只是从教程中复制它,我的语法也是错误的。知道我可能会误会的地方吗?
答案 0 :(得分:0)
如果您要进行单个查询:
WHERE (:location is null OR location_Id LIKE :location) AND
(:category is null OR category_Id LIKE :category)
从性能的角度来看,OR
会降低性能(通过阻止使用可用索引)。通常,应用程序会为非WHERE
参数值构建NULL
子句。