gpt4 book ai didi

java - 如何在JPA Spring Boot中的嵌套对象中通过Temporal.TIMESTAMP进行查询?

转载 作者:行者123 更新时间:2023-12-02 06:28:49 25 4
gpt4 key购买 nike

我有两个像这样的嵌套实体

@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);
}

我在 Controller 中有一个像这样的方法

@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 那样查询它。那么我怎样才能做到这一点呢?任何帮助,将不胜感激。谢谢

最佳答案

您需要设置日期,例如:

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

如果您想在一天之后或之前添加一天,则可以进行相同的计算:

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

您还可以在存储库中使用 @Query 注释来进一步纠正您的问题。

关于java - 如何在JPA Spring Boot中的嵌套对象中通过Temporal.TIMESTAMP进行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55770796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com