日期之间的JAVA JPA在查询中发出

时间:2015-10-06 20:31:41

标签: java jpa

尝试在CriteriaQuery中使用,但不断遇到编译问题!

数据作为参数传递,请参阅以下代码:

public List<PlanTacticBuyFile> getByTacticIdsDates(List<Integer> ids, Date startDate, Date endDate)
{
    CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<PlanTacticBuyFile> q = builder.createQuery(PlanTacticBuyFile.class);
    Root<PlanTacticBuyFile> c = q.from(PlanTacticBuyFile.class);
    ParameterExpression<Date> d = builder.parameter(Date.class);
    q.where(builder.and(c.get("tacticId").in(ids),
            builder.between(builder.literal(startDate), c.get("startDate"), c.get("endDate"))));

在调用之间的第一个参数上获得编译错误。

谢谢!

1 个答案:

答案 0 :(得分:0)

如何参数化您的CriteriaQuery?我在你的代码中看到了一个日期ParameterExpression对象,但我不确定你是否在其他地方使用过它。

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<PlanTacticBuyFile> q = builder.createQuery(PlanTacticBuyFile.class);
Root<PlanTacticBuyFile> c = q.from(PlanTacticBuyFile.class);

ParameterExpression<Date> date = builder.parameter(Date.class, "startDate");
q.where(builder.and(c.get("tacticId").in(ids),
        builder.between(date, c.get("startDate"), c.get("endDate"))));
...

em.createQuery(q).setParameter("startDate", startDate).getResultList();