我正在嘗試用一個字符串被強制轉換爲長的子查詢來編寫一個查詢。 我可能錯過了什麼?如何正確使用JPA2 Criteria API將字符串轉換爲數字?
查詢看起來像:
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));
凡EntityKeyword_.relatedToId一個是字符串,需要投龍。
但底層的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}
不知道什麼是錯的。任何幫助表示讚賞。
我使用Hibernate 3.6.8決賽