谓词失败的JPA查询

时间:2018-10-03 14:07:43

标签: java hibernate jpa-2.0

我开始使用CriteriaQuery,并在使用谓词构建非常简单的查询时遇到问题。以下是显示用法的简化代码,其目的是查找所有某些属性(工资,年龄,ipt。)小于指定值的人。

public List<Object> list(Session session, Class class, String propertyName, Long value) {
   List<Predicate> predicates = ArrayList<>();
   CriteriaBuilder builder = session.getCriteriaBuilder();
   CriteriaQuery query = builder.createQuery(class);
   Root root = query.from(class);
   query.select(root);

   EntityType entityType_ = session.getMetamodel().entity(class);     
       predicates.add(builder.lt(root.get(entityType_.getSingularAttribute(propertyName)), value));

   Predicate[] restrictions = new Predicate[predicates.size()];
   query.where(mCrtBuilder.and(mPredicates.toArray(restrictions)));

   return session.createQuery(query).getResultList();

}

问题在于,这会导致String查询看起来像这样(仅作为示例):

  

从薪水<200000L的人中选择*

在ValueHandlerFactory中呈现查询时,在可比较值之后的'L'被附加到值上,并导致异常:

  

产生原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:   “ where子句”中的未知列“ 200000L”

有人知道我哪里出问题了吗?

0 个答案:

没有答案