Bonjour

j'ai une requête sql SELECT avec une clause WHERE composée d'un IN devant recevoir des String correspondant à un type crée par moi même dans Postgresql via:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
CREATE TYPE relation_type AS ENUM ('relation.type.spouse','relation.type.parent','relation.type.child','relation.type.other');
La requête :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT * FROM person 
INNER JOIN relation ON person.per_id = relation.per_id_other 
WHERE rel_type IN (:relationtypes) ;
rel_type est donc de type relation_type.

Les objets de type Relation crée via cette requête sont normalement récupérés via un mapping (MappingSqlQueryWithParameters<Relation>) dans mon application.

Je ne vois pas comment faire le passage de la liste en spécifiant qu'il s'agit d'une liste d'un type ENUM de la base SQL.

Une idée ?

(après ce n'est pas bloquant car il y a toujours la solution bien moche du style:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
String sql = "SELECT * FROM person 
INNER JOIN relation ON person.per_id = relation.per_id_other 
WHERE rel_type IN ( ";
for(String type : types) {
sql +=  "'"+type+"'::relation_type, ";
}
sql = sql.replaceAll(", $",")");
qui doit fonctionner )