【发布时间】:2012-05-04 12:04:20
【问题描述】:
我正在使用 Spring Data JPA 并尝试向我的存储库添加查询。我试图在没有 @Query 注释的情况下构建查询,例如:
List<Item> findByTypeAndStateOrStateAndStartDateBetween(Type type, State s, State s2, Date startDate, Date endDate);
我的目标是构建这样的查询:
select * from item where type = ? and (state = ? or state = ?) and start_date between ? and ?
我的问题是 OR 子句。有没有办法确保有括号?否则,逻辑不对。我在这里找到的例子: http://static.springsource.org/spring-data/data-jpa/docs/1.0.0.M1/reference/html/#jpa.query-methods.query-creation
没有超过 1 列的 or 子句。
另外,有没有办法传入一个对象列表。例如,如果我想查找具有 3 个状态的项目,我将不得不创建另一个查询,它不能很好地扩展。
谢谢。
编辑:
我想出了如何使用@Query 表示法传递状态列表。你这样做:
@Query("FROM item i WHERE i.type = ?1 AND i.state IN (?2)")
然后您可以将一个列表作为第二个参数传递给该方法。如果不使用 @Query 表示法,仍然不知道如何做到这一点。
【问题讨论】:
-
我认为这就是 Spring Data 允许您指定查询的原因,它只能从方法名称中确定您想要的内容。这对于简单的查询很好,但一旦增加了复杂性,你最好准确地告诉它你想要什么,而不是让它猜测。
-
加上@Query 比冗长的方法名更容易阅读。
-
谢谢,这也是我得出的结论。只需使用@Query。
标签: jpa spring-data-jpa