N'ayant reçu aucun retour sous forme de réponses ni même de commentaire, je m'apprêtais à abandonner, lorsque je suis tombé sur cet excellent article de blog :
Comment lier les types de paramètres Hibernate personnalisés aux requêtes JPA
La publication propose deux options pour contrôler les types que JPA transmet via le pilote à Postgres (ou quelle que soit la base de données sous-jacente). J'ai opté pour l'approche en utilisant TypedParameterValue
. Voici à quoi ressemble mon code en continuant avec l'exemple ci-dessus :
Query query = entityManager.createNativeQuery(sqlString, MyEntity.class);
query.setParameter("param1", new TypedParameterValue(StringType.INSTANCE, null));
query.setParameter("param2", new TypedParameterValue(DoubleType.INSTANCE, null));
List<MyEntity> = query.getResultList();
Bien sûr, il est trivial de passer null
pour chaque paramètre dans la requête, mais je le fais principalement pour montrer la syntaxe du texte et des doubles colonnes. En pratique, on s'attendrait à ce qu'au moins quelques-uns des paramètres soient non null
, mais la syntaxe ci-dessus gère toutes les valeurs, nulles ou non.