2014-07-17 1 views
4

Je suis à la recherche d'utiliser CriteriaBuilder pour une requête insensible à la casse comme décrit ici hibernate jpa criteriabuilder ignore case queries et dans beaucoup d'autres questions et tutoriels sur le web.jpa criteriabuilder supérieur donne l'erreur de compilation

Mon code est:

public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder) { 
    return builder.equal(builder.upper(root.get("firstName")), "test".toUpperCase()); 
} 

mais je reçois une erreur de compilation:

The method upper(Expression<String>) in the type CriteriaBuilder is not applicable for the arguments (Path<Object>)

La version de JPA mise en veille prolongée J'utilise est:

<groupId>org.hibernate.javax.persistence</groupId> 
<artifactId>hibernate-jpa-2.1-api</artifactId> 
<version>1.0.0.Final</version> 

Cela dépend-il de la version d'hibernation que j'utilise? Comment mettre une Expression < Chaîne> là au lieu d'un Chemin < Objet>?

Merci pour votre aide

Répondre

9

Comme compilateur a dit que nous attendons, il est l'expression dans ce cas, le chemin va de l'expression, mais vous avez un chemin pour résoudre ce problème en raison de la suivante.

return builder.equal(builder.upper(root.<String> get("firstName")), "test".toUpperCase()); 

Trick est d'ajouter <String> avant méthode get, l'espoir qui aide.

+0

merci! c'était le problème, je m'interrogeais sur Expression vs Path et il me manquait le point qu'il attendait une chaîne au lieu d'un objet –

+0

Cela m'a aidé aussi. Je vous remercie. Btw voici mon petit extrait au cas où cela peut aider quelqu'un d'autre. criteriaQuery.select (cb.greatest (à partir de get (EVENT_TIME_STAMP))); –

Questions connexes