尝试在同一个 JPA 方法签名中使用“OR”和“AND”

问题描述

findByFloorIdAndCategoryOrAreaIdAndCategory

我需要从同一个表中使用 ((flooId and category) or (areaId and category)) 进行查询。 上面给定的名称不起作用。它抛出以下错误

List<SpacetoDevice> spacetoDevices = spacetoDeviceRepository.findByFloorIdAndCategoryOrAreaIdAndCategory(id,category,id,category);

Error: with root causecom.azure.data.cosmos.CosmosClientException: 
    Gateway Failed to Retrieve Query Plan: 
    Message: {"Errors":["Invalid query. Specified duplicate parameter name '@category'."]}

解决方法

虽然可能隐藏了一个错误,但您确实不应该这样做。

查询派生有意不提供任何方法来控制 ANDOR 操作之间的优先级。查询派生背后的想法是为简单的方法名称创建查询,其中 SQL/JPQL 仅从方法名称就很明显。但是像 findByFloorIdAndCategoryOrAreaIdAndCategory 这样的名称不是您通常会使用的名称(我希望如此),因此您不应该使用。

改为选择更短、更好的名称并添加 @Query 注释或命名查询。

至于潜在的错误:如果您可以提供复制器,请在https://github.com/spring-projects/spring-data-jdbc/issues

报告