Что касается последнего варианта, я предлагаю прочитать (внимательно) соответствующий раздел документации:
Hibernate3 поддерживает отложенную загрузку
индивидуальных свойств. это
методика оптимизации также известна
как выборочные группы. Обратите внимание, что это
это в основном маркетинговая функция;
оптимизация чтения строк намного больше
важнее, чем оптимизация колонки
читает. Тем не менее, только загрузка некоторых
свойства класса могут быть полезны
в крайних случаях. Например, когда
унаследованные таблицы имеют сотни столбцов
и модель данных не может быть улучшена.
Чтобы включить отложенную загрузку свойств, установите
ленивый атрибут вашего конкретного
сопоставления свойств:
<class name="Document">
<id name="id">
<generator class="native"/>
</id>
<property name="name" not-null="true" length="50"/>
<property name="summary" not-null="true" length="200" lazy="true"/>
<property name="text" not-null="true" length="2000" lazy="true"/>
</class>
Загрузка ленивых свойств требует
Инструментарий байт-кода времени сборки. Если
ваши постоянные занятия не
улучшенный, Hibernate будет игнорировать ленивый
настройки свойств и вернуться к
немедленная загрузка.
Для инструментов байт-кода используйте
следующее задание Ant:
<target name="instrument" depends="compile">
<taskdef name="instrument" classname="org.hibernate.tool.instrument.InstrumentTask">
<classpath path="${jar.path}"/>
<classpath path="${classes.dir}"/>
<classpath refid="lib.class.path"/>
</taskdef>
<instrument verbose="true">
<fileset dir="${testclasses.dir}/org/hibernate/auction/model">
<include name="*.class"/>
</fileset>
</instrument>
</target>
Другой способ избежать
ненужный столбец читает, по крайней мере, для
транзакции только для чтения, это использовать
Особенности проекции HQL или Критерии
запросы. Это позволяет избежать необходимости
время обработки байт-кода и является
безусловно, предпочтительное решение.
Вы можете заставить обычного нетерпеливого извлечения
свойств, использующих выборку всех
свойства в HQL.
Лично я бы предпочел первый вариант. Если это невозможно, я бы выбрал вариант № 2 (да, он вводит больше обслуживания, но вы можете держать его под контролем, если используете это решение только для частей, которые действительно являются проблемой). Я не фанат варианта № 3.