gpt4 book ai didi

java - 使用 Spring Data 按不同日期属性对页面进行排序

转载 作者:行者123 更新时间:2023-12-01 09:47:38 25 4
gpt4 key购买 nike

我正在使用 Spring Data 访问带有映射对象的 SQL 数据库。我有一个对象,它具有多个日期属性,这些属性与对象的不同状态相关。

public class Foo {
Date deadlineOne; // relevant in State.ONE
Date deadlineTwo; // relevant in State.TWO
Date deadlineThree; // relevant in State.THREE
State state; // implemented via persisted Enum
}

现在,在 UI 中,我想使用名为“下一个截止日期”之类的属性来显示这些对象,并且还能够按此方面进行排序。此“下一个截止日期”应始终是相关州相关的最早日期。例如,如果我有以下对象:

O1{state:ONE, deadlineOne: '2016-06-14', deadlineTwo: '2016-06-16', deadlineThree: '2016-06-19'}
O2{state:TWO, deadlineOne: '2016-06-12', deadlineTwo: '2016-06-13', deadlineThree: '2016-06-20'}
O3{state:THREE, deadlineOne: '2016-06-15', deadlineTwo: '2016-06-18', deadlineThree: '2016-06-21'}

我希望它们在按“下一个截止日期”排序时像这样显示

Object | Next Deadline | State
O2 | 2016-06-13 | TWO
O1 | 2016-06-14 | ONE
O3 | 2016-06-21 | THREE

我只是不知道如何使用 Spring Data 实现此功能。到目前为止,我一直在使用 PageRequest 并通过仅传递对象的属性来进行基本排序工作。但这样我就无法按照我需要的方式混合排序属性。

到目前为止我尝试过的内容

通过 JPA Query Annotaion 实现此功能,在 JpaRepository 接口(interface)中使用 SQL Case 语法:

@Query("SELECT f FROM Foo f ORDER BY CASE
WHEN f.state = State.ONE THEN f.deadlineOne
WHEN f.state = State.TWO THEN f.deadlineTwo
WHEN f.state = State.THREE THEN f.deadlineThree")
Page<Foo> findSortedByNextDeadline(Pageable pageable);

解释器似乎无法接受这一点并且没有提供任何有用的错误信息。

问题

有什么方法可以让 Spring Data 和正确的 Query/PageRequest 一起工作,还是我必须维护一个单独的 nextDeadline 属性或类似的东西?

最佳答案

好吧,我已经成功了,具体方法如下:

就像 Dimpre Jean-Sébastien 在他的评论中指出的那样,我缺少 END 关键字。我还必须向我的状态属性添加显式 @Enumerated(EnumType.ORDINAL) (这仅与我的特定情况相关,它也应该适用于 String 类型)。我还引用了我的状态的枚举及其完整的包名称。最后它看起来像这样:

@Query("SELECT f FROM Foo f ORDER BY CASE
WHEN f.state = com.package.State.ONE THEN f.deadlineOne
WHEN f.state = com.package.State.TWO THEN f.deadlineTwo
WHEN f.state = com.package.State.THREE THEN f.deadlineThree
ELSE f.deadlineOne END")
Page<Foo> findSortedByNextDeadline(Pageable pageable);

关于java - 使用 Spring Data 按不同日期属性对页面进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37857963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com