【问题标题】:Compare difference between two dates using JPA Criteria Query使用 JPA Criteria Query 比较两个日期之间的差异
【发布时间】:2014-08-31 09:58:02
【问题描述】:

我使用 MySQL 作为我的应用程序的后端。

我想使用 JPA Criteria Query 执行下面的查询。

SELECT * 
FROM table1 t1
WHERE datediff(now(), t1.created) >= 20;

注意:created 的类型是 TIMESTAMP

我想要像这样的条件查询:

CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();

// select
CriteriaQuery<Table1> query = cb.createQuery(Table1.class);

// from
Root<Table1> root = query.from(Table1.class);

// where
List<Predicate> predicates = new ArrayList<Predicate>();

// TODO: add expression for datediff(now(), t1.created) >= 20

query.where(cb.and(predicates.toArray(new Predicate[0])));

谁能帮忙?

提前致谢。

【问题讨论】:

    标签: java jpa criteria-api datediff


    【解决方案1】:

    假设createdjava.util.Date,则必须在java 中执行DATEDIFF 并将属性与结果日期进行比较:

    Calendar c = Calendar.getInstance();
    c.add(Calendar.DAY_OF_YEAR, -20);
    Date myDate = c.getTime();
    
    predicates.add(cb.lessThanOrEqualTo(root.<Date>get("created"), myDate));
    

    【讨论】:

    • 非常感谢您的回复。但是,你犯了一个小错误。我认为它不应该是 cb.greaterThanOrEqualTo() 它应该是 cb.lessThanOrEqualTo()。因为我们正在查找早于 20 天 的记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多