我尝试使用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();
}
我在TestAPI中的代码部分:
@GetMapping("typemap/getcategories")
public List<SublogTypeMapV> getcategories(@RequestParam String responsibleGroupId) throws Exception{
return typeMapService.getcategories(responsibleGroupId);
}
由休眠生成的查询:
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_,609 INFO [stdout] (default task-1) sublogtype0_.category_id as category_id3_7_,609 INFO [stdout] (default task-1) sublogtype0_.keyword as keyword4_7_,609 INFO [stdout] (default task-1) sublogtype0_.responsible_group_id as responsible_group_5_7_,609 INFO [stdout] (default task-1) sublogtype0_.subtype as subtype6_7_,609 INFO [stdout] (default task-1) sublogtype0_.subtype_id as subtype_id7_7_,609 INFO [stdout] (default task-1) sublogtype0_.type as type8_7_,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) sublogtype0_.category_id>0L
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: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
对我来说,似乎括号生成得很好,我也尝试在sql developer中运行此查询,并且它可以工作。我花了几个小时试图找到解决方案,但找不到任何有用的方法。 有什么想法吗?