微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决尝试在同一个 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

报告

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。