Java、CriteriaBuilder、ORA-00907:缺少右括号

Koz*_*kom 5 java hibernate jpa criteria

我尝试使用 CriteriaBuilder 而不是编写查询,但是当我测试它时,它给出错误并且无法提取 ResultSet。我在服务中的代码部分:

public List getCategories(String responsibleGroupId) throws Exception {
    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery<SublogTypeMapV> query = builder.createQuery(SublogTypeMapV.class);
    Root<SublogTypeMapV> root = query.from(SublogTypeMapV.class);
    List<Predicate> andPredicates = new ArrayList<>();

    Predicate categoryIdNotNull = builder.isNotNull(root.get(SublogTypeMapV_.categoryId));
    Predicate categotyIdGt = builder.gt(root.get(SublogTypeMapV_.categoryId), 0);
    String[] responsibleGroupListString = responsibleGroupId.split(",");
    Long[] responsibleGroupListLong = new Long[responsibleGroupListString.length];
    for (int i = 0; i < responsibleGroupListString.length; i++) {
        responsibleGroupListLong[i] = Long.valueOf(responsibleGroupListString[i]);
    }
    Predicate responsibleGroup = root.get(SublogTypeMapV_.responsibleGroupId).in(responsibleGroupListLong);
    Predicate getCategories;
    if (responsibleGroupId != null && !responsibleGroupId.equals("0"))
        getCategories = builder.and(categoryIdNotNull, categotyIdGt, responsibleGroup);
    else
        getCategories = builder.and(categoryIdNotNull, categotyIdGt);
    andPredicates.add(getCategories);
    Predicate resultPredicate = builder.and(andPredicates.toArray(new Predicate[0]));

    query.select(root).where(resultPredicate);
    return entityManager.createQuery(query).getResultList();
}
Run Code Online (Sandbox Code Playgroud)

我在 TestAPI 中的代码部分:

@GetMapping("typemap/getcategories")
public List<SublogTypeMapV> getCategories(@RequestParam String responsibleGroupId) throws Exception{
    return typeMapService.getCategories(responsibleGroupId);
}
Run Code Online (Sandbox Code Playgroud)

由休眠生成的查询:

14:06:33,608 INFO  [stdout] (default task-1) Hibernate: 
14:06:33,608 INFO  [stdout] (default task-1)     select
14:06:33,608 INFO  [stdout] (default task-1)         sublogtype0_.type_map_id as type_map_id1_7_,
14:06:33,608 INFO  [stdout] (default task-1)         sublogtype0_.category as category2_7_,
14:06:33,609 INFO  [stdout] (default task-1)         sublogtype0_.category_id as category_id3_7_,
14:06:33,609 INFO  [stdout] (default task-1)         sublogtype0_.keyword as keyword4_7_,
14:06:33,609 INFO  [stdout] (default task-1)         sublogtype0_.responsible_group_id as responsible_group_5_7_,
14:06:33,609 INFO  [stdout] (default task-1)         sublogtype0_.subtype as subtype6_7_,
14:06:33,609 INFO  [stdout] (default task-1)         sublogtype0_.subtype_id as subtype_id7_7_,
14:06:33,609 INFO  [stdout] (default task-1)         sublogtype0_.type as type8_7_,
14:06:33,609 INFO  [stdout] (default task-1)         sublogtype0_.type_id as type_id9_7_ 
14:06:33,609 INFO  [stdout] (default task-1)     from
14:06:33,609 INFO  [stdout] (default task-1)         reglr.sublog_type_map_v sublogtype0_ 
14:06:33,609 INFO  [stdout] (default task-1)     where
14:06:33,609 INFO  [stdout] (default task-1)         (
14:06:33,609 INFO  [stdout] (default task-1)             (
14:06:33,609 INFO  [stdout] (default task-1)                 sublogtype0_.category_id is not null 
14:06:33,609 INFO  [stdout] (default task-1)             )
14:06:33,609 INFO  [stdout] (default task-1)         )
14:06:33,609 INFO  [stdout] (default task-1)         and(
14:06:33,609 INFO  [stdout] (default task-1)             (
14:06:33,609 INFO  [stdout] (default task-1)                 sublogtype0_.category_id>0L 
14:06:33,609 INFO  [stdout] (default task-1)             )
14:06:33,609 INFO  [stdout] (default task-1)         )
14:06:33,609 INFO  [stdout] (default task-1)         and(
14:06:33,609 INFO  [stdout] (default task-1)             (
14:06:33,609 INFO  [stdout] (default task-1)                 sublogtype0_.responsible_group_id in(
14:06:33,609 INFO  [stdout] (default task-1)                     7703L , 7702L
14:06:33,609 INFO  [stdout] (default task-1)                 )
14:06:33,609 INFO  [stdout] (default task-1)             )
14:06:33,609 INFO  [stdout] (default task-1)         )
Run Code Online (Sandbox Code Playgroud)

最后,错误:

14:06:34,050 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-1) SQL Error: 907, SQLState: 42000
14:06:34,050 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-1) ORA-00907: missing right parenthesis
Run Code Online (Sandbox Code Playgroud)

对我来说似乎括号生成得很好,我也尝试在 sql developer 中运行这个查询并且它有效。我花了几个小时试图找到解决方案,但找不到任何有用的东西。有任何想法吗?