Mi bean Java tiene una propiedad childCount. Esta propiedad no está asignada a una columna de la base de datos . En cambio, debería ser calculado por la base de datos con una COUNT()
función operando en la unión de mi bean Java y sus hijos. Sería incluso mejor si esta propiedad pudiera calcularse bajo demanda / "perezosamente", pero esto no es obligatorio.
En el peor de los casos, puedo establecer la propiedad de este bean con HQL o la API Criteria, pero preferiría no hacerlo.
La @Formula
anotación de Hibernate puede ayudar, pero apenas pude encontrar documentación.
Cualquier ayuda muy apreciada. Gracias.
@Formula
anotación usa SQL, no HQL.Como se explica en este artículo , tiene tres opciones:
@Transient
método@PostLoad
detector de entidades@Formula
anotación específica de HibernateSi bien Hibernate le permite usar @Formula , con JPA, puede usar la devolución de llamada @PostLoad para completar una propiedad transitoria con el resultado de algún cálculo:
Para consultas más complejas, puede usar Hibernate
@Formula
, como se explica en este artículo :fuente
Eche un vistazo a Blaze-Persistence Entity Views que funciona sobre JPA y proporciona soporte DTO de primera clase. Puede proyectar cualquier cosa a los atributos dentro de Vistas de entidad e incluso reutilizará los nodos de unión existentes para asociaciones si es posible.
Aquí hay un mapeo de ejemplo
Obtener esto generará una consulta JPQL / HQL similar a esta
Aquí hay una publicación de blog sobre proveedores de subconsultas personalizadas que también pueden ser interesantes para usted: https://blazebit.com/blog/2017/entity-view-mapping-subqueries.html
fuente
he probado esto en mi código
los errores que obtengo cuando ejecuto y muestro mi vista incluso antes de intentar mostrar la columna en el bigote son algo como esto
La pregunta que hice fue ¿hay alguna manera de obtener valores de la columna calculada usando JPA / Hibernate con mySQL?
Qué estoy haciendo mal ?
fuente