当前位置: 首页 > 知识库问答 >
问题:

SpringData JPA“and”and“or”查询未按预期工作

谢麒
2023-03-14
select * from user where (name like ? or detail like ?) and age = ?
Page<Post> findByNameOrDetailContainingAndAgeEquals(String query, int age, Pageable pageable);

Page<Post> findByNameContainingOrDetailContainingAndAgeEquals(String query, String query, int age, Pageable pageable);

我已经读过这个答案,如何组合多个And和Or通过方法名,我同意它。但是,我不认为我的情况像行动的复杂,你可以看到。只是“and”和“OR”查询条件组合,这在SQL方式中是相当容易的,但我只想通过JPA方式来实现。

共有1个答案

江正德
2023-03-14

我不认为JPA可以使用开箱即用的命名查询来处理这些带有括号的复杂条件。此外,您还使用了like子句,命名查询不处理该子句(这些子句只用于相等)。

你最好的办法可能是用像这样的东西

@Query("SELECT u FROM User u WHERE (u.name like : name or u.detail like : detail) and u.age = :age"
Collection<User> findUsersByNameDetailAndAge(String name, String detail, int age);

最坏的情况是,如果这不起作用,您将不得不在这里使用本机查询。

 类似资料:
  • 问题内容: 对于相当简单的表结构,即。 ie. Person, Criteria, and PersonCriteria (the combi-table),我现在设置了一个查询,以选择具有所有选定条件的所有人员。 此刻查询本身看起来像这样: 到目前为止,没有问题,一切正常。 现在,我想为用户提供在搜索中添加一些AND和OR变量的可能性。有人会说: 我正在寻找一个拥有以下条件的人:条件1 AND

  • 问题内容: 基本上,我试图从基于两个不同组的SQL中获取数据,必须相等并且必须相等,但是至于我想要同时获得和,这是我尝试的无济于事。 我很确定他们的方法可以使此查询正常工作,只是不在我脑海 问题答案: 具有比更高的优先级,因此您现有的表达式当前被评估为: 要强制使用替代逻辑,需要包括显式括号: 但是,在这种情况下,可以使用MySQL的运算符代替:

  • 问题内容: 我想在CI中组合AND OR mysql查询。我已经看过这个线程:http : //codeigniter.com/forums/viewthread/92818/。但是他们没有提供确切的解决方案。 如何严格使用CI框架创建以下查询? (我可以轻松地创建查询而无需使用方括号,但是它不是同一查询。) PS:这只是一个示例查询,即使没有意义,也不建议将查询的整个OR部分写在一个内。 编辑:

  • 在 PostgreSQL 中,AND 和 OR 也叫连接运算符,在查询数据时用于缩小查询范围,我们可以用 AND 或者 OR 指定一个或多个查询条件。 AND AND 运算符表示一个或者多个条件必须同时成立。 在 WHERE 子句中,AND 的使用语法如下: 实例 创建 COMPANY 表(下载 COMPANY SQL 文件 ),数据内容如下: 以下实例读取 AGE 字段大于 25 且 SALAR

  • 问题内容: 我怎么说 对于更复杂的查询,我应该使用原始SQL吗? 问题答案: 利用参数分组(Laravel4.2)。以您的示例为例:

  • 问题内容: 我有以下格式的json文件:- 我想根据以下内容查询文档:- 我尝试使用SearchSourceBuilder和QueryBuilders.matchQuery,但无法使用AND和OR运算符放置多个子查询。 我们如何使用OR和AND运算符查询elasticsearch? 问题答案: 我认为在这种情况下,Bool查询是最好的选择。 就像是 : 在Java中: 该部分是S,该部分都或多或少