【问题标题】:Spring data: order by result of condition for each rowSpring数据:按每行条件结果排序
【发布时间】: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


【解决方案1】:

所以找到了解决方案,但以我喜欢的 jpa 规范的方式: JpaRepository: Spring Sort for runtime query variabels

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    相关资源
    最近更新 更多