Сбой запроса JPA с предикатами - PullRequest
0 голосов
/ 03 октября 2018

Я начал использовать CriteriaQuery и столкнулся с проблемой при создании очень простого запроса с предикатом.Ниже приведен упрощенный код для демонстрации использования. Идея состоит в том, чтобы найти всех людей, чей определенный атрибут (зарплата, возраст, итп.) Меньше указанного значения.

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, которые выглядят так (просто пример):

select * from Person, где заработная плата <200000L </p>

Это 'L'после того, как сопоставимое значение добавляется к значению при отображении запроса в ValueHandlerFactory и приводит к исключению:

Причина: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: неизвестный столбец «200000L» в'where clause'

У кого-нибудь есть идеи, где я ошибаюсь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...