Comment puis-je attribuer la valeur "null" à un paramètre Hibernate ? Exemple :
Query query = getSession().createQuery("from CountryDTO c where c.status = :status and c.type =:type")
.setParameter("status", status, Hibernate.STRING)
.setParameter("type", type, Hibernate.STRING);
Dans mon cas, la chaîne d'état peut être nulle. J'ai débogué cela et hibernate génère alors une chaîne/quête SQL comme ceci .... status = null
... Cependant, cela ne fonctionne pas dans MYSQL, car l'instruction SQL correcte doit être " status is null
"(Mysql ne comprend pas status=null et l'évalue à false de sorte qu'aucun enregistrement ne sera jamais retourné pour la requête, selon les docs mysql que j'ai lu...)
Mes questions :
-
Pourquoi est-ce que
Hibernate
traduire correctement une chaîne nulle en "est nulle" (et crée plutôt et à tort "=null") ? -
Quelle est la meilleure façon de réécrire cette requête pour qu'elle soit nulle ? Par nullsafe, j'entends que, dans le cas où la chaîne "status" est nulle, il faut créer un "is null" ?
1 votes
Pour tous ceux qui sont intéressés par une solution, je pense que l'API Critères est une voie à suivre. Mais je ne suis pas encore vraiment convaincu car elle bloque le code de façon horrible et l'utilisation de HQL serait beaucoup plus propre. Peut-être que la vraie solution est d'implémenter votre propre type Hibernate (j'en ai implémenté un pour les ENUMs mais ces types auto-implémentés, au moins les types de base ont de gros désavantages par rapport aux types Hibernate standard pour les requêtes avec HQL (à moins que vous n'étendiez aussi le parseur HQL ?) ce qui en fait un énorme projet et nécessite beaucoup de connaissances sur Hibernate...(suite dans la partie 2)
0 votes
Partie 2 : Peut-être que le plus simple (d'un autre côté, ce n'est certainement PAS une bonne pratique) est de modifier directement la classe Hibernate String Type elle-même et d'ajouter la logique manquante. Cela ne devrait être qu'une ligne de vue pour vérifier les valeurs null String et agir en conséquence...
5 votes
Je viens de tomber sur ça aussi... mon Dieu, c'est de la folie.
1 votes
Je déteste sérieusement Hibernate, c'est absolument stupide.
1 votes
Alors, toutes ces années plus tard, existe-t-il une solution à ce problème sans utiliser l'API Critères ?
1 votes
@phpslightly Je ne peux pas croire qu'il n'y en a pas encore !