gpt4 book ai didi

java - Spring Data JPA - 是否可以对计算属性进行排序?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:41:25 24 4
gpt4 key购买 nike

假设您有以下实体:

@Entity
public class Game {

@Id
@GeneratedValue
private Integer id;

private String name;

private Calendar startTime;
private int durationInSeconds;

public GameStatus getStatus() {
if( startTime.after(Calendar.getInstance()))
{
return GameStatus.SCHEDULED;
} else {
Calendar endTime = Calendar.getInstance();
endTime.setTime(startTime.getTime());
endTime.roll(Calendar.SECOND, durationInSeconds);

if( endTime.after(Calendar.getInstance())) {
return GameStatus.OPEN_FOR_PLAY;
}
else {
return GameStatus.FINISHED;
}
}
}
}

如果我的 GameRepository 是一个 PagingAndSortingRepository,我怎样才能得到一页结果,按 status 属性排序?

我目前得到:

java.lang.IllegalArgumentException: Unable to locate Attribute  with the the 
given name [status] on this ManagedType [org.test.model.Game]

我可以理解,因为 status 确实没有 JPA 属性。有解决办法吗?

(我在底层使用 Hibernate,所以任何特定于 Hibernate 的东西也可以)

最佳答案

问题在于 Spring Data 的 PageRequest 排序是通过形成 ORDER BY 子句在数据库层完成的。

您可以创建一个@Formula 列,例如

@Entity
public class Game {
...
// rewrite your logic here in HQL
@Formula("case when startTime >= endTime then 'FINISHED' ... end")
private String status;

然后可以按排序顺序使用新列,因为您在公式中写入的所有内容都将传递给 ORDER BY 子句。

关于java - Spring Data JPA - 是否可以对计算属性进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37139985/

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