2016-06-08 26 views
2

würde Ich mag Sammlung/Arrays in den "IN" Parametern liefern, aber ich habejOOQ - Plain SQL Parameterized Array/Liste

Als ich Array verwendet:

org.jooq.exception.SQLDialectNotSupportedException: Cannot bind ARRAY types in dialect MYSQL  

Als ich Liste verwendet:

org.jooq.exception.SQLDialectNotSupportedException: Type class java.util.Arrays$ArrayList is not supported in dialect DEFAULT 

Hier ist meine Ebene sql:

String sql = "SELECT SUM(foo.reply = 'Y') yes " + 
      "FROM foo " + 
      "LEFT OUTER JOIN bar " + 
      "ON foo.id = bar.foo_id " + 
      "WHERE " + 
      "foo.id = ? " + 
      "AND foo.some_id IN (?) "; //this is the part I would like to use array or list 

Hier ist, wie ich ausführen es

dslContext.fetch(sql, val(fooId), val(someIds)) 
        .into(Summary.class); 

Antwort

2

Sie können nicht mit einzelnen Bindevariablen tun (außer in PostgreSQL mit Arrays).

String sql = "SELECT SUM(foo.reply = 'Y') yes " + 
      "FROM foo " + 
      "LEFT OUTER JOIN bar " + 
      "ON foo.id = bar.foo_id " + 
      "WHERE " + 
      "foo.id = {0} " + 
      "AND foo.some_id IN ({1}) "; // Use the {0}, {1} placeholders 

Und dann

dslContext.fetch(sql, 
       val(fooId), 
       DSL.list(someIds.stream().map(DSL::val).collect(toList()))) 
      .into(Summary.class); 

Siehe auch DSL.list(QueryPart...)

: Aber Sie können Ebene SQL-Abfrage Teile in jOOQ als solche verschachtelt verwenden