Criteria IN/NOT IN com sub select - Hibernate

Boa noite,

Meu IN/NOT IN está funcionando perfeitamente:

subSelect = String.format("SELECT DISTINCT %s FROM %s WHERE %s = %d", filter.getString("fieldSubSelect"), filter.getString("tableRelated"), filter.getString("fieldWhere"), values.get(0)); valuesSubSelect = hibernateTemplate.find(subSelect); criteria.add(Restrictions.in(field, valuesSubSelect));

Mas agora caí em um porém:
Quando o valuesSubSelect retorna uma lista de valores, beleza, funciona perfeitamente. Mas nem sempre esse subSelect trará dados, as vezes virá vazio, e aí que está o problema, o IN será montado IN() com parametro vazio. Ocorre erro de sintaxe no IN/NOT IN:

41541 ["http-bio-8080"-exec-4] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1064, SQLState: 42000 41541 ["http-bio-8080"-exec-4] ERROR org.hibernate.util.JDBCExceptionReporter - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '))' at line 1 Hibernate: select this_.id as id2_0_, this_.nome as nome2_0_ from modulo this_ where not (this_.id in ())

Alguma sugestão?
Obrigado!

Resolvi fazendo o seguinte:

subSelect = String.format("%s IN(SELECT DISTINCT %s FROM %s WHERE %s = %d)", field, filter.getString("fieldSubSelect"), filter.getString("tableRelated"), filter.getString("fieldWhere"), values.get(0)); criteria.add(Restrictions.sqlRestriction(subSelect));
Obrigado!

[quote=fabiojpoli]Resolvi fazendo o seguinte:

subSelect = String.format("%s IN(SELECT DISTINCT %s FROM %s WHERE %s = %d)", field, filter.getString("fieldSubSelect"), filter.getString("tableRelated"), filter.getString("fieldWhere"), values.get(0)); criteria.add(Restrictions.sqlRestriction(subSelect));
Obrigado![/quote]

Cara, poderia me dizer da onde você tira os parametros “field”, etc, que está utilizando no String.format para substituir os %s e %d?

Se puder colocar o bloco todo …

Obrigado!

[quote=danistation][quote=fabiojpoli]Resolvi fazendo o seguinte:

subSelect = String.format("%s IN(SELECT DISTINCT %s FROM %s WHERE %s = %d)", field, filter.getString("fieldSubSelect"), filter.getString("tableRelated"), filter.getString("fieldWhere"), values.get(0)); criteria.add(Restrictions.sqlRestriction(subSelect));
Obrigado![/quote]

Cara, poderia me dizer da onde você tira os parametros “field”, etc, que está utilizando no String.format para substituir os %s e %d?

Se puder colocar o bloco todo …

Obrigado!

[/quote]
Cara, esse é um metodo muito especifico de filtro que vem de um escopo enorme, pra ti entender pra que serve e como funciona eu teria de explicar todo o contexto pra ti. Só tenho oq lhe dizer q é como o codigo acima, ou seja, 3 Strings e 1 Integer (campo, tabela, nome do campo para a condicao e o valor para a condicao - para um filtro generico que implementei)… Do que exatamente vc precisa? O que quer fazer?