java - spring data JPA CriteriaBuilder.isNull 返回语法错误

标签 java spring hibernate

规范:

public Predicate toPredicate(Root<Hotel> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
    Predicate predicate = root.get("starRating").in(s);
            if (unrated) {
                predicate = cb.or(predicate, cb.isNull(root.get("starRating")));
            }
     return predicate;
}

哪里sSet .

SQL日志: Hibernate: select hotel0_.hotel_id as hotel_id1_16_, hotel0_.star_rating as star_ra13_16_ where hotel0_.active=? and (hotel0_.star_rating in () or hotel0_.star_rating is null) order by lower(hotel0_.hotel_name) asc

错误: ERROR 6828 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: syntax error at or near ")"

异常: org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet

我在这里缺少什么?

最佳答案

您的查询中的问题位于:hotel0_.star_ rating in ()。 在此之前对 set 进行空检查:

if(s != null && !s.isEmpty()){
  predicate = root.get("starRating").in(s);
}

关于java - spring data JPA CriteriaBuilder.isNull 返回语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53656264/

相关文章:

java - 在 JPA 实体内实例化 JavaFX 属性会导致 "Unable to load class"错误

java - Spring 中的 MyBatis 与 Sql Builder 和注释

spring - 在 Spring-Integration 中将 X 附加到自定义请求 header

java - 在 hibernate 3.6.8 中,我用什么代替 nullSafeSet 和 nullSafeGet 因为文档说它们已被弃用

hibernate - "Automatic"更新 Hibernate 后,嵌套实体的连接获取失败

java - JSP 中的 UTF-8 URI 编码损坏

java - 从调用对象调用函数

java - Spring的事件模型

spring - CAS服务器配置

java - 我需要 Maven 才能使用 Hibernate 吗?