i ont une table comme celui-ci:Comment mapper une propriété pour l'utilisation de HQL uniquement (dans Hibernate)?
id | name | score
mis en correspondance avec un POJO via XML avec Hibernate. La colonne de score dont j'ai besoin seulement dans oder by
- clauses dans HQL. La valeur de la colonne de score est calculée par un algorithme et mise à jour toutes les 24 heures via le traitement par lots SQL (JDBC). Donc, je ne veux pas polluer mon POJO avec des propriétés dont je n'ai pas besoin à l'exécution.
Pour une seule colonne qui peut ne pas poser de problème, mais j'ai plusieurs colonnes de score différentes. Existe-t-il un moyen de mapper une propriété pour l'utilisation de HQL uniquement?
Par exemple comme ceci:
<property name="score" type="double" ignore="true"/>
afin que je puisse encore faire:
from Pojo p order by p.score
mais ma mise en œuvre de POJO peut ressembler à ceci:
public class Pojo
{
private long id;
private String name;
// ...
}
Pas Setter pour score
fourni ou la propriété ajoutée à la mise en œuvre. En utilisant la dernière version d'Hibernate pour Java.
Mise à jour:
Dans un monde parfait, il peut être fait comme celui-ci (grâce à Pascal Thivent):
<property name="score" access="noop" insert="false" update="false"/>
Mais dans notre monde réel, il existe a bug since years que personne ne semble se soucier. Donc, quelqu'un a-t-il des suggestions pour une solution de contournement?
À propos de cette chose noop, méfiez-vous! Il ne fera pas partie de l'objet Java mappé, mais il sera toujours présent dans la mémoire HQL! Une fois, je voulais ne pas obtenir un champ BLOB dans le cadre du résultat car ils remplissaient de la mémoire Java mais cela devait être pris en compte dans la requête. Je pensais que j'étais en sécurité mais j'ai fini par obtenir des erreurs OutOfMemory car la requête HQL chargeait toujours tous les BLOB, même s'ils ne faisaient pas partie des résultats. – Icegras