Wim*_*uwe 3 java spring spring-data spring-data-jpa
假设您有以下实体:
@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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我GameRepository是a PagingAndSortingRepository,我如何获得一个结果页面,按status属性排序?
我目前得到:
java.lang.IllegalArgumentException: Unable to locate Attribute with the the
given name [status] on this ManagedType [org.test.model.Game]
Run Code Online (Sandbox Code Playgroud)
我可以理解,因为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;
Run Code Online (Sandbox Code Playgroud)
然后,可以按排序顺序使用新列,因为您在公式中编写的所有内容都将传递给ORDER BY子句.
| 归档时间: |
|
| 查看次数: |
3133 次 |
| 最近记录: |