我开始使用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”
有人知道我哪里出问题了吗?