Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将日期和整数的数量与JPA规范中的日期进行比较_Java_Spring_Jpa_Spring Data_Spring Data Jpa - Fatal编程技术网

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 javas
start
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))
);