Ho una tabella come questa:Come mappare una proprietà solo per uso HQL (in Hibernate)?
id | name | score
mappato ad un POJO via XML con Hibernate. La colonna del punteggio mi serve solo in oder by
- clausole in HQL. Il valore per la colonna del punteggio viene calcolato da un algoritmo e aggiornato ogni 24 ore tramite il processo batch SQL (JDBC). Quindi non voglio inquinare il mio POJO con proprietà che non ho bisogno in fase di runtime.
Per una singola colonna potrebbe non essere un problema, ma ho diverse colonne di punteggio diverse. C'è un modo per mappare una proprietà solo per uso HQL?
Ad esempio come questo:
<property name="score" type="double" ignore="true"/>
in modo che io ancora posso fare questo:
from Pojo p order by p.score
ma la mia implementazione POJO potrebbe essere questa:
public class Pojo
{
private long id;
private String name;
// ...
}
No Setter per score
fornito o proprietà aggiunta all'implementazione.
utilizzando l'ultima versione di Hibernate per Java.
Aggiornamento:
In un mondo perfetto si può fare in questo modo (grazie a Pascal Thivent):
<property name="score" access="noop" insert="false" update="false"/>
Ma nel nostro mondo reale esiste a bug since years cui nessuno sembra preoccuparsi. Quindi qualcuno ha suggerimenti per una soluzione alternativa?
A proposito di questa cosa di noop, attenzione! Non farà parte dell'oggetto Java mappato, ma sarà comunque presente nella memoria HQL! Una volta volevo non ottenere un campo BLOB come parte del risultato perché stavano riempiendo la memoria Java ma doveva essere considerata nella query. Pensavo di essere al sicuro ma ho finito per ottenere errori OutOfMemory perché la query HQL stava ancora caricando tutti i BLOB, anche se non facevano parte dei risultati. – Icegras