Tengo una tabla como la siguiente:¿Cómo correlacionar una propiedad solo para HQL (en Hibernate)?
id | name | score
asignan a un POJO a través de XML con Hibernate. La columna de puntaje solo necesito en oder by
- cláusulas en HQL. El valor de la columna de puntaje se calcula mediante un algoritmo y se actualiza cada 24 horas mediante el proceso por lotes SQL (JDBC). Así que no quiero contaminar mi POJO con propiedades que no necesito en tiempo de ejecución.
Para una sola columna que puede no ser un problema, pero tengo varias columnas de puntaje diferentes. ¿Hay alguna manera de asignar una propiedad para el uso de HQL solamente?
Por ejemplo así:
<property name="score" type="double" ignore="true"/>
de manera que todavía puedo hacer esto:
from Pojo p order by p.score
pero mi aplicación POJO puedo tener este aspecto:
public class Pojo
{
private long id;
private String name;
// ...
}
Sin Setter de score
provisto o propiedad agregada a la implementación.
utilizando la última versión de Hibernate para Java.
Actualización:
En un mundo perfecto se puede hacer así (gracias a Pascal Thivent):
<property name="score" access="noop" insert="false" update="false"/>
Pero en nuestro mundo real existe a bug since years la que nadie parece preocuparse. Entonces, ¿alguien tiene alguna sugerencia para una solución alternativa?
Sobre esta cosa de noop, ¡cuidado! No será parte del objeto Java mapeado, ¡pero aún estará presente en la memoria HQL! Una vez quise no obtener un campo BLOB como parte del resultado porque estaban llenando la memoria de Java pero tenía que considerarse en la consulta. Pensé que estaba a salvo, pero terminé recibiendo errores OutOfMemory porque la consulta HQL aún estaba cargando todos los BLOB, incluso si no formaban parte de los resultados. – Icegras