Meu bean Java tem uma propriedade childCount. Esta propriedade não está mapeada para uma coluna do banco de dados . Em vez disso, ele deve ser calculado pelo banco de dados com uma COUNT()
função operando na junção de meu bean Java e seus filhos. Seria ainda melhor se essa propriedade pudesse ser calculada sob demanda / "preguiçosamente", mas isso não é obrigatório.
Na pior das hipóteses, posso definir a propriedade deste bean com HQL ou a API Criteria, mas preferiria não fazê-lo.
A @Formula
anotação do Hibernate pode ajudar, mas eu mal consegui encontrar qualquer documentação.
Qualquer ajuda muito apreciada. Obrigado.
@Formula
anotação usa SQL, não HQL.Conforme explicado neste artigo , você tem três opções:
@Transient
método@PostLoad
ouvinte de entidade@Formula
anotação específica do HibernateEnquanto o Hibernate permite que você use @Formula , com JPA, você pode usar o retorno de chamada @PostLoad para preencher uma propriedade transitória com o resultado de alguns cálculos:
Para consultas mais complexas, você pode usar o Hibernate
@Formula
, conforme explicado neste artigo :fonte
Dê uma olhada no Blaze-Persistence Entity Views, que funciona com base no JPA e fornece suporte DTO de primeira classe. Você pode projetar qualquer coisa em atributos dentro de Visualizações de entidade e até mesmo reutilizará nós de junção existentes para associações, se possível.
Aqui está um exemplo de mapeamento
A busca irá gerar uma consulta JPQL / HQL semelhante a esta
Aqui está uma postagem de blog sobre provedores de subconsulta personalizados que pode ser interessante para você: https://blazebit.com/blog/2017/entity-view-mapping-subqueries.html
fonte
eu tentei isso no meu código
os erros que recebo quando corro e exibo minha visão antes mesmo de tentar exibir a coluna de bigode é algo assim
a pergunta que fiz foi : há uma maneira de obter valores da coluna Calculada usando JPA / Hibernate com mySQL?
O que estou fazendo de errado ?
fonte