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 中运行这个查询并且它有效。我花了几个小时试图找到解决方案,但找不到任何有用的东西。有任何想法吗?
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |