【发布时间】:2015-04-15 10:53:22
【问题描述】:
在纯 SQL 中,可以计算运行时变量,例如每行的 IF/SUM,并可以将其用于排序。 我关于在 QueryDSL/Criteria API 中做类似事情的可能性的问题 有没有可能?
我有一个名为 OrderSummary 的实体,包含以下字段:
@Entity
@Table(name = "orders")
public class OrderSummary implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue
private Long id;
@Column(name="title")
private String title;
@Column(name = "fixing_due_date")
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime fixingDueDate;
...
}
而且我已经生成了 Q-class。
所以我尝试申请订购以下说明符:
private OrderSpecifier<Boolean> order() {
QOrderSummary orderSummary = QOrderSummary.orderSummary;
DateTimePath<DateTime> fixingDueDate = orderSummary.fixingDueDate;
BooleanExpression be = fixingDueDate.after(DateTime.now());
OrderSpecifier<Boolean> ose = be.desc();
return ose;
}
但我得到了异常“com.mysema.query.types.PredicateOperation 不能转换为 com.mysema.query.types.Path”
我问了一个类似的问题(关于 CriteriaAPI),但不幸的是,没有人理解以下内容的真正含义: JpaRepository: Spring Sort for runtime query variabels
关于每行条件结果排序的问题。
谢谢!
【问题讨论】:
-
您使用的是哪个版本的 spring-data-jpa、spring-data-commans 和 QueryDSL?
-
spring-data-jpa: 1.6.2.RELEASE;查询DSL:3.6.1;休眠:4.0.1.Final
-
用于排序的 QueryDSL 存在问题,该问题已在最新的 Evans 和 Dijkstra 版本中得到解决。您能否尝试升级到 spring-data-jpa 1.6.5 或 1.7.2 并查看错误是否仍然存在 - 我建议在错误跟踪器上开一张票。
-
谢谢克里斯托夫。于是,我把问题发给了querydsl用户组,得到了丰富的解释:groups.google.com/forum/#!topic/querydsl/fiCMKVt7SFs
-
Bug 已修复,但我使用 JPASpecificationExecutor 以我喜欢的方式找到了解决方案。如果您有兴趣,可以通过我的答案中的链接关注
标签: spring-data spring-data-jpa criteria-api querydsl