OrderBy не работает при попытке сортировки по вложенному полю в JPA Spring Boot - PullRequest
2 голосов
/ 19 апреля 2019

У меня есть такие сущности

@Entity
@Table(name = "past_price")
public class PastPrice {

    @Id
    private String symbol;
    @OneToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
    @JoinColumn(name = "symbol")
    private Set<Price> prices = null;

    public String getSymbol() {
        return symbol;
    }

    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }

    public Set<Price> getPrices() {
        return prices;
    }

    public void setPrices(Set<Price> prices) {
        this.prices = prices;
    }

}
@Entity
public class Price {
    @Id
    @Temporal(TemporalType.TIMESTAMP)
    private Date date;
    private String price;

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

}

Тогда у меня есть хранилище JPA, подобное этому

@Repository
public interface PastPriceRepo extends JpaRepository<PastPrice,String> {
    PastPrice findBySymbol_OrderByPricesDate(String symbol);
}

Где я пытаюсь отсортировать его по date, который находится внутри Price класса, который находится внутри PastPrice класса. Но я не получаю отсортированный список. Я получаю это во время вызова от restcontroller.

{
    "symbol": "SAX",
    "prices": [
        {
            "date": 1552295163000,
            "price": "234.00"
        },
        {
            "date": 1552459623000,
            "price": "236.00"
        },
        {
            "date": 1552470475000,
            "price": "232.00"
        },
        {
            "date": 1553155398000,
            "price": "233.00"
        },
        {
            "date": 1553762003000,
            "price": "234.00"
        },
        {
            "date": 1552469784000,
            "price": "233.00"
        },
        {
            "date": 1553755597000,
            "price": "235.00"
        },
        {
            "date": 1553760225000,
            "price": "234.00"
        },
        {
            "date": 1552284839000,
            "price": "226.00"
        }
    ]
}

Как мне составить мой метод в интерфейсе репозитория? Любая помощь будет оценена. Спасибо

1 Ответ

0 голосов
/ 19 апреля 2019

Вы могли бы сделать что-то вроде

@Repository
public interface PastPriceRepo extends JpaRepository<PastPrice,String> {
    @Query(
        value = "select pp from PastPrice pp join pp.prices ps where pp.symbol=:symbol Order By ps.date desc"
    )
    PastPrice findBySymbol_OrderByPricesDate(@Param("symbol") String symbol);
}
...