Estou com problemas para efetuar busca numa tabela do PostgreSQL utilizando o Hibernate. A tabela possui colunas que contém campos com ?string vazia? e o Hibernate retorna um erro quando traz um registro que contém uma “string vazia”
Detalhes do design da coluna no banco PostgreSQL:
Data type: character varying(20)
Default:
Not NULL? No
Na classe Java, a coluna está anotada assim:
@Column(name = “rg”)
private String rgCliente;
A query string abaixo funciona perfeitamente quando não existe uma “string vazia” no registro:
SELECT c FROM Cliente c WHERE c.id = 765432
E retorno em Json fica assim:
[{“id”:765432,“nomeCliente”:“FULANO DE TAL”,“rgCliente”:“234567890”}]
Quando altero a query para:
SELECT c.id, c.nomeCliente, c.rgCliente FROM Cliente c WHERE c.id = 765432
O Hibernate não retorna um objeto e sim um ArrayList. O resultado em Json fica sem a identificação das colunas:
[[765432,“FULANO DE TAL”,“234567890”]]
Para resolver o problema acima, alterei a query para retornar um objeto:
SELECT new ClienteDTO(c.id, c.nomeCliente, c.rgCliente) FROM Cliente c WHERE c.id = 765432
Porém o Hibernate não consegue instanciar o objeto ClienteDTO, quando o registro possui “string vazia”:
Java.lang.IllegalArgumentException: org.hibernate.QueryException: could not instatiate class [ClienteDTO] from tuple
Tentei utilizar o JPA Criteria Builder. Consegui utilizá-lo em consultas simples, mas devido a complexidade, não consegui implementar uma consulta que atendesse minha necessidade.
Não posso alterar o banco de dados e preciso que o Json seja retornado com as identificações das colunas.
As opções para implementar uma solução podem ser realizadas:
- na query;
- na anotação da classe;
- ou tratando o resultado Json (caso seja possível).
Se alguém puder ajudar, agradeço,