Как выполнить запрос по Temporal.TIMESTAMP в JPA Spring Boot во вложенных объектах? - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть две вложенные сущности, подобные этой

@Entity
@Table(name = "daily_past_prices")
public class DailyPastPrice  {

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

    public String getSymbol() {
        return symbol;
    }

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

    public List<DailyPrice> getPrices() {
        return prices;
    }

    public void setPrices(List<DailyPrice> prices) {
        this.prices = prices;
    }
}
@Entity
public class DailyPrice {
    @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;
    }

}

Я сохраняю дату в Temporal.TIMESTAMP, что означает, что дата сохраняется как 1555732546000 эта в базе данных.Теперь мне нужно запросить значения после определенной даты.Итак, я настроил репозиторий как этот

@Repository
public interface DailyPastPriceRepo extends JpaRepository<DailyPastPrice,String> {
    DailyPastPrice findBySymbolAndPricesDateAfter(String symbol, Date date);
}

И у меня есть метод в контроллере как этот

@GetMapping("/{symbol}/{upto}")
    private ResponseEntity<DailyPastPrice> getDayWisePastPrice(@PathVariable String symbol,@PathVariable int upto) throws ParseException {
        DailyPastPrice pastPrice = dailyPastPriceRepo.findBySymbol(symbol.toUpperCase());

        Date date = CurrentDate.getPreviousDates(upto);
        System.out.println("1 day before "+date);//this gives me a date before one day if upto is 1 like this Fri Apr 19 11:50:52 IND 2019
        DailyPastPrice ppBefore1d = dailyPastPriceRepo.findBySymbolAndPricesDateAfter(symbol.toUpperCase(),date);
        if (ppBefore1d == null){
            return new ResponseEntity<>(ppBefore1d, HttpStatus.NOT_FOUND);
        }

        return new ResponseEntity<>(ppBefore1d, HttpStatus.OK);
    }

Но я получаю null и, следовательно, NOT_FOUND.Нужно ли конвертировать Fri Apr 19 11:50:52 IND 2019 в long как 1555732546000 во время запроса, но тогда это будет тип long, и тогда я не смогу запросить его как dateAfter.Так как я могу это сделать?Любая помощь будет оценена.Спасибо

1 Ответ

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

вам нужно установить дату как:

int milliseconds = 8645163154;
java.sql.Date d = new java.sql.Date(milliseconds);

если вы хотите добавить один день после или до, то вы можете рассчитать так же, как:

int oneDay = 1000 * 60 * 60 * 24; // 86400000

Вы также можете использовать аннотацию @Query в своем хранилище для дальнейшего устранения вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...