您可以使用CriteriaBuilder#function()执行要添加
days到中的数据库函数
retentionDate。我已经使用DATEADD()制作了一个示例,因为我的测试项目使用H2数据库运行。
Parameterexpression<String> dayUnit = builder.parameter(String.class, "dayUnit"); expression<DateTime> newDate = builder.function("DATEADD", DateTime.class, dayUnit, days, retentionDate);
完整的示例:
CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<B> cq = builder.createQuery(B.class); Root<B> fromB = cq.from(B.class); expression<DateTime> lastmodifiedDate = fromB.get(B_.lastmodifiedDate); expression<DateTime> retentionDate = fromB.get(B_.a).get("retentionDate"); expression<Integer> days = fromB.get(B_.a).get("days"); Parameterexpression<String> dayUnit = builder.parameter(String.class, "dayUnit"); expression<DateTime> newDate = builder.function("DATEADD", DateTime.class, dayUnit, days, retentionDate); cq.where(builder.greaterThanOrEqualTo(newDate, lastmodifiedDate)); TypedQuery<B> tq = entityManager.createQuery(cq.select(fromB)); tq.setParameter("dayUnit", "DAY"); List<B> results = tq.getResultList();
该查询将转换为SQL,如下所示:
select b0_.id as id1_1_, b0_.a_id as a_id3_1_, b0_.lastmodified_date as lastmodi2_1_ from b b0_ cross join a a1_ where b0_.a_id=a1_.id and DATEADD(?, a1_.days, a1_.retention_date)>=b0_.lastmodified_date
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)