Ich habe eine Tabelle wie diese:Wie wird eine Eigenschaft nur für die HQL-Verwendung zugeordnet (in Hibernate)?
id | name | score
zu einem POJO über XML mit Hibernate abgebildet. Die Score Spalte brauche ich nur in oder by
- Klauseln in HQL. Der Wert für die Score-Spalte wird von einem Algorithmus berechnet und alle 24 Stunden über den SQL-Batch-Prozess (JDBC) aktualisiert. Also möchte ich meinen POJO nicht mit Eigenschaften verschmutzen, die ich zur Laufzeit nicht brauche.
Für eine einzelne Spalte, die kein Problem sein kann, aber ich habe mehrere verschiedene Score-Spalten. Gibt es eine Möglichkeit, eine Eigenschaft nur für die HQL-Verwendung zuzuordnen?
Zum Beispiel wie folgt aus:
<property name="score" type="double" ignore="true"/>
, so dass ich dies noch tun können:
from Pojo p order by p.score
aber meine POJO Umsetzung wie folgt aussehen:
public class Pojo
{
private long id;
private String name;
// ...
}
Kein Setter für score
bereitgestellt oder Eigenschaft zur Implementierung hinzugefügt.
mit der neuesten Hibernate-Version für Java.
Update:
In einer perfekten Welt kann es so (dank Pascal Thivent) erfolgen:
<property name="score" access="noop" insert="false" update="false"/>
Aber in unserer realen Welt gibt es a bug since years, die niemand zu kümmern scheint. Hat also jemand einen Vorschlag für einen Workaround?
Über dieses noop Sache, passen Sie auf! Es wird nicht Teil des abgebildeten Java-Objekts sein, aber es wird weiterhin im HQL-Speicher vorhanden sein! Ich wollte einmal nicht ein BLOB-Feld als Teil des Ergebnisses bekommen, weil sie Java-Speicher füllten, aber es in der Abfrage berücksichtigt werden musste. Ich dachte, ich wäre sicher, aber es kam zu OutOfMemory-Fehlern, weil die HQL-Abfrage immer noch alle BLOBs geladen hat, auch wenn sie nicht Teil der Ergebnisse waren. – Icegras