Problema com cláusula delete no Hibernate

Olá pessoal tudo bem? Estou querendo montar consultas dinamicamente utilizando HQL e me deparei com um problema. A cláusula DELETE não permite usar JOINs. Procurando na internet vi que uma possível solução é criar subconsultas. Antes de implementar essa funcionalidade, resolvi implementar alguns testes, como demonstrado abaixo. Porém ele não executa, me retorna um erro, o qual não estou conseguindo desvendar, segue abaixo a consulta e o erro:

String hquery = "DELETE FROM cliente c WHERE c.id IN (FROM cliente cli WHERE cli.id IN (1,3,7))";
int result = session.createQuery(hquery).executeUpdate();

Acontece o seguinte erro:
class org.hibernate.exception.GenericJDBCException could not execute update query
org.hibernate.exception.GenericJDBCException: could not execute update query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.hql.ast.exec.BasicExecutor.execute(BasicExecutor.java:110)
at org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:423)
at org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:283)
at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1288)
at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:117)

Alguém já se deparou com o mesmo problema? Alguma sugestão/solução?
Obrigado, abraço.

Não é um HQL válido.

A classe chamar Cliente e não cliente.

Se você já tem os IDs dos clientes pra deletar, porque necessitará de uma subconsulta?

Caso seja realmente necessário, o certo seria fazer:

String hquery = "DELETE FROM Cliente c WHERE c.id IN (SELECT cli.id FROM Cliente cli WHERE cli.id IN (1,3,7))";
int result = session.createQuery(hquery).executeUpdate();

Mas o seu exemplo ficou meio redundante para mim.

Agradeço as respostas @DarkElf e @marcusdacoregio.

@DarkElf, realmente devo ter copiado errado a HQL, peço desculpas, falha minha, modifiquei tanto o código aqui que esse erro passou batido.

@marcusdacoregio, é apenas um exemplo, montei essa consulta manualmente para testar as subconsultas. A ideia é fazer funcionar o mais simples para depois fazer algo mais robusto.

Como resultado, vou fazer de outra maneira… Quando tiver os ids eu apenas utilizo-os, quando não tiver, eu executo um consulta e retorno os ids. Consegui fazer dessa maneira…

Obrigado a todos, desculpa os erros bobos, abraço,

1 curtida