Comment bien fonte de la chaîne de nombre avec JPA2 Critères de l'API?
Je suis en train d'écrire une requête avec sélectionner si une chaîne est en fonte pour une longue.
Je suis sans doute raté quelque chose?
Requête ressemble:
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));
Où EntityKeyword_.relatedToId un est une Chaîne qui nécessite de lancer pour Longtemps.
Mais sous-jacent Hibernate échoue avec l'exception:
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}
Aucune idée de ce qui est mauvais. Toute aide est appréciée.
Je suis en utilisant Hibernate 3.6.8-Finale
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de méthode dans l'API des Critères qui effectue la conversion de Chaîne de caractères de Long.
Vous essayez d'utiliser la méthode comme dans Expression pour faire cette conversion. Javadoc explique pourquoi vous vous retrouvez à avoir des problèmes d'exécution:
CriteriaBuilder n'ont tas de méthodes pour transtypage, mais aussi pas de support pour la chaîne de conversion numérique.
Ci-dessous la méthode a fonctionné pour moi le type de fonte de la Chaîne à d'autres types de données à l'aide de CriteriaBuilder
Au départ, j'ai été confronté à de nombreuses erreurs à l'aide de CriteriaBuilder et essayé de vérifier la DB journaux de vérification de la requête qui est arriver exécuté. Cela a permis de corriger le HQL que nécessaire. L'approche ci-dessus fonctionne très bien dans PostgreSQL, mais la solution varie en fonction de la Base de données
Un type de coulée peut être fait par le CriteriaBuilder bien.
Voir la réponse de StackOverflow question 23728108