JPA / Hibernate: validação baseada em código de consultas jpa
Pergunta
O que é o caminho certo fazer validar um jpa consulta programaticamente. Hibernate valida todas as anotações com base consultas nomeadas em entidades. Mas como eu posso chamar esta rotina de validação em consultas jpa programaticamente edificaram, para verificar erros?
@Entity public class Foo { @Id public int id; public String name; }
main(...) { Query q = getEntityManager().createQuery("select e from " + Foo.class.getName() + " e where e.name = 'x' "); // validate q here }
Solução
Não faça isso. teste de integração o inferno fora de seu código, usando um banco de dados real com o mesmo esquema que o seu ambiente de produção.
Pense nisso: se você criar uma consulta mal formado, isso é uma bug de programação . O que você vai fazer com a informação? Informar ao usuário que uma consulta JPA é mal formado? Tudo o que você pode realmente fazer é registrar o erro e dizer ao usuário "algo de ruim aconteceu". Você saberá que é uma consulta malformado quando você verificar os logs depois de qualquer maneira ...
Editar
Ele também pode valer a pena investigar a chamada createQuery()
, alimentando-o Mau dados - o javadoc aqui sugere que ele pode jogar um HibernateException
, e eu não tenho certeza o que poderia fazer com uma seqüência diferente de validá-lo ...
Outras dicas
Ou você pode usar createQuery, ou você precisa colocar o seu nome da classe ao escrever um JPQL.