在Java JPA中按日期查询

时间:2014-12-11 05:36:54

标签: java mysql jpa

如何在JPA中查询MySQL中的DateTime?变量before是Date()对象,以毫秒为单位。我会做类似以下的事情:

@Override
@Transactional(readOnly = true)
public List<Entry> findAllBefore(Long before, Integer nEntries)
{

  CriteriaBuilder builder = this.getEntityManager().getCriteriaBuilder();
  CriteriaQuery<Entry> criteriaQuery = builder.createQuery(Entry.class);

  Root root = criteriaQuery.from(Entry.class);
  criteriaQuery.select( root );

  // seems not to work
  criteriaQuery.where( builder.lessThan( root.get( "start" ) , before ) ); 

  TypedQuery<Entry> typedQuery = this.getEntityManager()
     .createQuery(criteriaQuery)
     .setMaxResults(nEntries)

  return typedQuery.getResultList();
}

我希望从相应表中获取所有条目,其中DateTime列“start”位于变量'before'中的值之前。

1 个答案:

答案 0 :(得分:0)

你可以使用谓词吗? 也许在我的回复中会有编译错误,因为我现在不在我的电脑上,但有了它,找到你的方法应该非常简单。 首先在方法签名中我会传递一个日期(或者可能在方法中转换长日期)。

约会之后:

    CriteriaBuilder builder = this.getEntityManager().getCriteriaBuilder();
CriteriaQuery<Entry> criteriaQuery = builder.createQuery(Entry.class);
List<Predicate> predicates = new ArrayList<Predicate>();
ParameterExpression<Date> param = builder.parameter(Date.class, "start");
predicates.add(builder.lessThanOrEqualTo(root.get("beforeDate"), param));   criteriaQuery.select(customer)
        .where(predicates.toArray(new Predicate[]{}));
"EntityManagerVariableName".createQuery(cq).getResultList();