Mar*_*kus 4 jpa criteria-api jpa-2.0
我正在尝试使用subselect编写一个将字符串强制转换为long的查询。我可能缺少什么?
查询看起来像:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Task> query = cb.createQuery(Task.class);
Root<Task> from = query.from(Task.class);
Subquery<Long> subquery = query.subquery(Long.class);
Root<EntityKeyword> fromKeyword = subquery.from(EntityKeyword.class);
subquery.select(fromKeyword.get(EntityKeyword_.relatedToId).as(Long.class));
subquery.where(cb.like(fromKeyword.get(EntityKeyword_.keyword), term));
query.where(cb.in(from.get(ModelEntity_.id)).value(subquery));
Run Code Online (Sandbox Code Playgroud)
其中EntityKeyword_.relatedToId a是需要强制转换为Long的String。
但是底层的Hibernate失败,并带有以下异常:
Last cause: No data type for node: org.hibernate.hql.ast.tree.MethodNode
\-[METHOD_CALL] MethodNode: '('
+-[METHOD_NAME] IdentNode: 'cast' {originalText=cast}
\-[EXPR_LIST] SqlNode: 'exprList'
+-[DOT] DotNode: 'entitykeyw1_.keyword' {propertyName=keyword,dereferenceType=ALL,propertyPath=keyword,path=generatedAlias1.keyword,tableAlias=entitykeyw1_,className=l.i.s.m.s.EntityKeyword,classAlias=generatedAlias1}
| +-[ALIAS_REF] IdentNode: 'entitykeyw1_.id' {alias=generatedAlias1, className=l.i.s.m.s.EntityKeyword, tableAlias=entitykeyw1_}
| \-[IDENT] IdentNode: 'keyword' {originalText=keyword}
\-[IDENT] IdentNode: 'int8' {originalText=int8}
Run Code Online (Sandbox Code Playgroud)
不知道怎么了 任何帮助表示赞赏。
我正在使用Hibernate 3.6.8-Final
小智 5
下面的方法适用于我使用 CriteriaBuilder 将字符串类型转换为其他数据类型
CriteriaBuilder queryBuilder = em.getCriteriaBuilder();
Expression roomIdInt = queryBuilder.desc(root.get("room").get("id")).as(Integer.class));
//Expression roomIdInt = queryBuilder.desc(root.get("room").get("id")).as(Long.class));
//Expression roomIdInt = queryBuilder.desc(root.get("room").get("id")).as(Double.class));
//Expression roomIdInt = queryBuilder.desc(root.get("room").get("id")).as(Date.class));
//Expression roomIdInt = queryBuilder.desc(root.get("room").get("id")).as(Boolean.class));
Run Code Online (Sandbox Code Playgroud)
最初,我在使用 CriteriaBuilder 时遇到了许多错误,并尝试检查数据库日志以检查正在执行的查询。这有助于根据需要更正 HQL。上述方法在 PostgreSQL 中运行良好,但解决方案因数据库而异
| 归档时间: |
|
| 查看次数: |
12780 次 |
| 最近记录: |