问题描述
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'."]}
解决方法
虽然可能隐藏了一个错误,但您确实不应该这样做。
查询派生有意不提供任何方法来控制 AND
和 OR
操作之间的优先级。查询派生背后的想法是为简单的方法名称创建查询,其中 SQL/JPQL 仅从方法名称就很明显。但是像 findByFloorIdAndCategoryOrAreaIdAndCategory
这样的名称不是您通常会使用的名称(我希望如此),因此您不应该使用。
改为选择更短、更好的名称并添加 @Query
注释或命名查询。
至于潜在的错误:如果您可以提供复制器,请在https://github.com/spring-projects/spring-data-jdbc/issues
报告