Bonjour

Je souhaite exécuter une requête du type :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
select id from table1 where (col1,col2) in ( ('val1','val2') , ('val3','val4') , ... );
Comment faire pour passer en paramètre la liste des couples de valeurs dans le IN ? Doit-on passer une collection de tableau d'objets ?
Chaque entrée de la collection serait un tableau d'objet et correspondrait au couple. Chaque tableau d'objet contiendrait les deux valeurs qui forment le couple ...

J'ai essayé ceci en HQL, mais ça sort une exception :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
final Set<String[]> couples = new HashSet<String[]>();
couples.add(new String[] { "val1", "val2" });
couples.add(new String[] { "val3", "val4" });
 
String req = "select t.id from Table1 t where (t.col1,t.col2) in (:couples)";
final Query query = session.createQuery(req);
query.setParameterList("couples", couples);
final List<String> res = query.list();
Exception :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
2009-02-19 12:22:33,044 [main] [WARN] org.hibernate.util.JDBCExceptionReporter - SQL Error: 920, SQLState: 42000
2009-02-19 12:22:33,044 [main] [ERROR] org.hibernate.util.JDBCExceptionReporter - ORA-00920: invalid relational operator
Merci d'avance pour votre aide