복붙노트

[SPRING] 스프링 데이터 JPA - 계산 된 속성을 정렬 할 수 있습니까?

SPRING

스프링 데이터 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;
            }
        }
    }
}

내 GameRepository가 PagingAndSortingRepository 인 경우 상태 속성별로 정렬 된 결과 페이지를 어떻게 얻을 수 있습니까?

나는 현재 얻는다 :

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

내가 이해할 수있는 것은 실제로 상태가 JPA 속성이 아니기 때문입니다. 이 문제를 해결할 방법이 있습니까?

(나는 Hibernate를 사용하고있다. 그래서 어떤 Hibernate도 특정하다.)

해결법

  1. ==============================

    1.문제는 Spring Data의 PageRequest 정렬이 ORDER BY 절을 형성하여 데이터베이스 계층에서 수행된다는 것입니다.

    문제는 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 절로 전달되므로 정렬 순서로 새 열을 사용할 수 있습니다.

  2. from https://stackoverflow.com/questions/37139985/spring-data-jpa-is-it-possible-to-sort-on-a-calculated-property by cc-by-sa and MIT license