#java #postgresql #hibernate #spring-boot #spring-data-jpa
#java #postgresql #спящий режим #spring-boot #spring-data-jpa
Вопрос:
У меня есть два вложенных объекта, подобных этому
@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;
}
}
Я сохраняю дату во временном.ВРЕМЕННАЯ МЕТКА, которая означает, что дата сохраняется 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
like 1555732546000
во время запроса, но тогда это будет long
тип, и тогда я не смогу запросить его like dateAfter
. Итак, как я могу это сделать? Любая помощь будет оценена. Спасибо
Ответ №1:
вам нужно установить дату следующим образом:
int milliseconds = 8645163154;
java.sql.Date d = new java.sql.Date(milliseconds);
если вы хотите добавить один день после или раньше, вы можете рассчитать то же самое, что и:
int oneDay = 1000 * 60 * 60 * 24; // 86400000
Вы также можете использовать @Query
аннотацию в своем репозитории для дальнейшего устранения вашей проблемы.