相关疑难解决方法(0)

Spring JPA Data"OR"查询

我正在使用Spring Data JPA并尝试向我的存储库添加查询.我试图在没有@Query注释的情况下构建查询,如:

List<Item> findByTypeAndStateOrStateAndStartDateBetween(Type type, State s, State s2, Date startDate, Date endDate);
Run Code Online (Sandbox Code Playgroud)

我的目标是构建一个这样的查询:

select * from item where type = ? and (state = ? or state = ?) and start_date between ? and ?
Run Code Online (Sandbox Code Playgroud)

我的问题是OR子句.有没有办法确保有括号?否则,逻辑是不对的.我在这里找到的例子:http: //static.springsource.org/spring-data/data-jpa/docs/1.0.0.M1/reference/html/#jpa.query-methods.query-creation

没有任何或超过1列的子句.

还有,有一种传递对象列表的方法.例如,如果我想找到具有3种状态的项目,我将不得不创建另一个查询,这种查询不能很好地扩展.

谢谢.

编辑:

我想出了如何使用@Query表示法传递状态列表.你这样做:

@Query("FROM item i WHERE i.type = ?1 AND i.state IN (?2)")
Run Code Online (Sandbox Code Playgroud)

然后你可以将列表作为第二个参数传递给方法.如果不使用@Query表示法仍然不知道如何做到这一点.

jpa spring-data-jpa

17
推荐指数
2
解决办法
1万
查看次数

使用“OR”的 Spring 查询示例

我有一个 JPA 实体,它有两个属性可以通过“OR”运算符而不是“AND”进行搜索。这些是 ledgerCode 和 Division:

Company comp = new Company();
ExampleMatcher matcher =
    ExampleMatcher.matching().withStringMatcher(StringMatcher.CONTAINING)
        .withIgnoreCase("name");

comp.setCountryCode(countryCode);
comp.setLedgerCode(ledgerCode);
comp.setDivision(division);
comp.setName(name);

List<Company> result = compSearchRepository.findAll(Example.of(comp, matcher));
Run Code Online (Sandbox Code Playgroud)

那么SQL结果应该是(假设所有参数不为空):

SELECT d 
  FROM COMPANY d 
 WHERE d.countryCode = country 
    OR d.ledgerCode = ledger 
    OR d.division = division 
   AND lower(d.name) LIKE '%name%'
Run Code Online (Sandbox Code Playgroud)

是否可以?如果是的话,怎么会这样呢?我在 Google 上找不到任何代码示例,也找不到 ExampleMatcher 类中的建议方法名称。

java spring query-by-example spring-data-jpa

5
推荐指数
1
解决办法
4502
查看次数

标签 统计

spring-data-jpa ×2

java ×1

jpa ×1

query-by-example ×1

spring ×1