Java 从日期格式早于x小时或秒的数据库中检索项目

Java 从日期格式早于x小时或秒的数据库中检索项目,java,sql,database,hybris,flexible-search,Java,Sql,Database,Hybris,Flexible Search,我有一个Cronjob,它需要通过条件子句从DB中获取一些项。在这种情况下,我需要比较一些日期的时间,它们就像数据库中的(Fri-Dec 18 12:36:07 EET 2020)(java.util.Date)。执行查询时,我需要从数据库中检索比当前时间早1小时的项目。 我认为我的查询需要像 从日期列>整数变量所在的表名中选择*。 问题是变量是一个从别处设置的整数。我怎么能做这件事?是否需要将变量从int更改为其他值?下面我以我的班级为例。在我的课堂上,我还没有上面写的示例查询。非常感谢 pu

我有一个Cronjob,它需要通过条件子句从DB中获取一些项。在这种情况下,我需要比较一些日期的时间,它们就像数据库中的(Fri-Dec 18 12:36:07 EET 2020)(java.util.Date)。执行查询时,我需要从数据库中检索比当前时间早1小时的项目。
我认为我的查询需要像
从日期列>整数变量所在的表名中选择*。

问题是变量是一个从别处设置的整数。我怎么能做这件事?是否需要将变量从int更改为其他值?下面我以我的班级为例。在我的课堂上,我还没有上面写的示例查询。非常感谢

public class HttpSessionCleanJob extends AbstractJobPerformable<HttpSessionCleanJobModel> {

private static final Logger LOG = Logger.getLogger(HttpSessionCleanJob.class.getName());

@Resource
private ModelService modelService;
@Resource
private FlexibleSearchService flexibleSearchService;

@Override
public PerformResult perform(final HttpSessionCleanJobModel httpSessionCleanJobModel) {

    LOG.info("Start cleaning StoredHttpSession items...");
    final int maxJobTime = httpSessionCleanJobModel.getTime();

    final String queryString = "SELECT {" + StoredHttpSessionModel.PK + "} FROM {" + StoredHttpSessionModel._TYPECODE + "}";

    final Date specificTime = new Date();
    final FlexibleSearchQuery query = new FlexibleSearchQuery(queryString, Collections.singletonMap("specificTime", specificTime));

    final SearchResult<StoredHttpSessionModel> searchResult = flexibleSearchService.search(query);

    List<StoredHttpSessionModel> assetModelList = searchResult.getResult();

    for(StoredHttpSessionModel storedHttpSessionModel : assetModelList) {
        LOG.info(storedHttpSessionModel.getModifiedtime());
    }

    LOG.info("Finished cleaning StoredHttpSession items...");
    return new PerformResult(CronJobResult.SUCCESS, CronJobStatus.FINISHED);
}
}
公共类HttpSessionCleanJob扩展了AbstractJobPerformable{
私有静态最终记录器LOG=Logger.getLogger(HttpSessionCleanJob.class.getName());
@资源
私人模型服务模型服务;
@资源
私人FlexibleSearchService FlexibleSearchService;
@凌驾
公共性能结果执行(最终HttpSessionCleanJobModel HttpSessionCleanJobModel){
LOG.info(“开始清理StoredHttpSession项目…”);
final int maxJobTime=httpSessionCleanJobModel.getTime();
最后一个字符串queryString=“从{”+StoredHttpSessionModel.\u TYPECODE+“}中选择{”+StoredHttpSessionModel.PK+“}”;
最终日期指定时间=新日期();
最终FlexibleSearchQuery查询=新的FlexibleSearchQuery(queryString,Collections.singletonMap(“specificTime”,specificTime));
最终搜索结果SearchResult=flexibleSearchService.search(查询);
List assetModelList=searchResult.getResult();
对于(StoredHttpSessionModel StoredHttpSessionModel:assetModelList){
LOG.info(storedHttpSessionModel.getModifiedtime());
}
LOG.info(“已完成清理StoredHttpSession项目…”);
返回新的PerformResult(CronJobResult.SUCCESS,CronJobStatus.FINISHED);
}
}

您可以尝试以下方法:

specificTime.setTime(specificTime.getTime() - 5000)
结果是当前日期减去5000毫秒(5秒)

然后:

 final String queryString = "SELECT {" + StoredHttpSessionModel.PK + "} FROM {" + StoredHttpSessionModel._TYPECODE + "} WHERE {modifiedTime} < ?specificTime";

 final Date specificTime = new Date();
 final FlexibleSearchQuery query = new FlexibleSearchQuery(queryString, Collections.singletonMap("specificTime", specificTime));
final String queryString=“从{”+StoredHttpSessionModel.\u TYPECODE+“}中选择{”+StoredHttpSessionModel.PK+“},其中{modifiedTime}<?specificTime”;
最终日期指定时间=新日期();
最终FlexibleSearchQuery查询=新的FlexibleSearchQuery(queryString,Collections.singletonMap(“specificTime”,specificTime));
这将检索所有修改日期超过5秒的
StoredHttpSessionModel

调整代码以更符合您的需要。

我通过以下方法解决了此问题:

final String queryString = "SELECT {" + StoredHttpSessionModel.PK + "} FROM {" + StoredHttpSessionModel._TYPECODE + "} WHERE {" + StoredHttpSessionModel.MODIFIEDTIME +"} < now() - interval ?maxJobTime SECOND";
final String queryString=“从{”+StoredHttpSessionModel.\u TYPECODE+“}中选择{”+StoredHttpSessionModel.PK+“},其中{”+StoredHttpSessionModel.MODIFIEDTIME+“}
我现在就解决了它,我在下面说明了如何解决。非常感谢您的关注@罗伯特瓦西里很乐意帮忙:)