当函数特别在条件表达式中使用时,Hibernate无法制定/生成正确的SQL查询

当函数特别在条件表达式中使用时,Hibernate无法制定/生成正确的SQL查询,hibernate,jpa,Hibernate,Jpa,给定以下查询条件: CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<UserTable> criteriaQuery = criteriaBuilder.createQuery(UserTable.class); Root<UserTable> root = criteriaQuery.from(entityManager.getMetamodel().

给定以下查询条件:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<UserTable> criteriaQuery = criteriaBuilder.createQuery(UserTable.class);
Root<UserTable> root = criteriaQuery.from(entityManager.getMetamodel().entity(UserTable.class));

ParameterExpression<String> parameterExpression = criteriaBuilder.parameter(String.class);
criteriaQuery.where(criteriaBuilder.equal(criteriaBuilder.lower(criteriaBuilder.trim(root.get(UserTable_.emailId))), criteriaBuilder.lower(criteriaBuilder.trim(parameterExpression))));
List<UserTable> list = entityManager.createQuery(criteriaQuery).setParameter(parameterExpression, emailId).getResultList();
在这种情况下不会引发异常

这个问题在很久以前的Hibernate 3.6.0时代就出现了,但由于缺少至少一个可复制的测试用例而被拒绝。因此,它仍然是固定的

批量拒绝缺少测试用例或最近响应的问题

有没有解决这个问题的办法?意味着可以重写此查询而不影响返回的结果集吗


我正在使用Hibernate 5.0.4 final,正如前面所述。

Uh!生成的SQL查询中没有任何错误。因此引起的麻烦是深深的遗憾,第一次道歉。(EclipseLink生成
其中(LOWER(TRIM(email_id))=LOWER(TRIM(?))
。一眼就比较了两者,我无法观察到它们之间的差异)。不过,服务器在跟踪器上记录了一条警告消息:
警告[org.hibernate.dial.function.templaterender](默认任务-7)HH000174:函数模板预期有4个参数,但遇到3个参数