Java 将日期和整数的数量与JPA规范中的日期进行比较
我有以下字段的实体事件:Java 将日期和整数的数量与JPA规范中的日期进行比较,java,spring,jpa,spring-data,spring-data-jpa,Java,Spring,Jpa,Spring Data,Spring Data Jpa,我有以下字段的实体事件: @Temporal(TemporalType.TIMESTAMP) @JsonFormat(pattern = DATE_FORMAT) private Date start; @Column(name = "period_minutes") private Integer period; 我需要将这些字段的数量与当前日期时间进行比较: SELECT * FROM Event e WHERE (e.start + e.period) < NOW(); 但这并
@Temporal(TemporalType.TIMESTAMP)
@JsonFormat(pattern = DATE_FORMAT)
private Date start;
@Column(name = "period_minutes")
private Integer period;
我需要将这些字段的数量与当前日期时间进行比较:
SELECT * FROM Event e WHERE (e.start + e.period) < NOW();
但这并不适用于编译。我不知道如何将日期转换为long并添加句点*60*1000
(分钟->毫秒)。如何解决这个问题
解决方案
我已在@ССаΓ0的帮助下修复了此问题
cb.lessThan(
cb.sum(
cb.function("unix_timestamp", Long.class, root.get("start")),
cb.prod(root.get("period"), 1L)
),
cb.function("unix_timestamp", Long.class, cb.function("now", Long.class))
);
但是我不明白为什么如果我使用1L
它会起作用,如果我使用60L*1000L
(因为我需要计算周期的毫秒数,以分钟为单位),它不会起作用。试试这个:
规范谓词=(根、查询、cb)->{
表达式currentTime=cb.currentTime();
返回cb和(
cb.equal(root.get(“start”)、cb.currentDate()),//如果开始日期==当前日期
cb.lessThan(//如果时段<当前小时*60+当前分钟
root.get(“期间”),
cb.sum(//当前小时*60+当前分钟
cb.prod(cb.function(“hour”,Integer.class,currentTime),60),//hours*60
cb.function(“分钟”,Integer.class,currentTime)//当前分钟
)
)
);
};
列表事件=findAll(谓词);
其他信息:
看最后一篇文章,我想这就是你想要的。你是说start
和period是root.get(“start”)
,root.get(“period”)
?我不明白approach@CatHjava.util.Date java.sql.Date javasstart
cb.lessThan(
cb.sum(
cb.function("unix_timestamp", Long.class, root.get("start")),
cb.prod(root.get("period"), 1L)
),
cb.function("unix_timestamp", Long.class, cb.function("now", Long.class))
);