У меня есть таблица вроде этого:Как сопоставить свойство только для использования HQL (в Hibernate)?
id | name | score
отображенный на POJO с помощью XML с Hibernate. Столбец оценки мне нужен только в oder by
- предложениях в HQL. Значение столбца оценки вычисляется по алгоритму и обновляется каждые 24 часа через пакетный процесс SQL (JDBC). Поэтому я не хочу загрязнять свой POJO свойствами, которые мне не нужны во время выполнения.
Для одной колонки, которая может быть не проблема, но у меня есть несколько разных колонок. Есть ли способ отобразить свойство только для использования HQL?
Например, как это:
<property name="score" type="double" ignore="true"/>
так, что я до сих пор могу это сделать:
from Pojo p order by p.score
, но моя реализация POJO может выглядеть следующим образом:
public class Pojo
{
private long id;
private String name;
// ...
}
Нет Присваиватель score
предоставлено или добавлено к реализации.
с использованием последней версии Hibernate для Java.
Update:
В идеальном мире это может быть сделано, как это (благодаря Pascal Thivent):
<property name="score" access="noop" insert="false" update="false"/>
Но в нашем реальном мире существует a bug since years, который никто, кажется, заботится о. У кого-нибудь есть предложения об обходном пути?
Об этой штуке нупа, остерегайтесь! Он не будет частью отображаемого Java-объекта, но он все равно будет присутствовать в памяти HQL! Я как-то хотел не получить поле BLOB как часть результата, потому что они заполняли память Java, но это нужно было учитывать в запросе. Я думал, что я в безопасности, но в итоге получаю ошибки OutOfMemory, потому что запрос HQL по-прежнему загружал все BLOB-файлы, даже если они не были частью результатов. – Icegras