Улучшение производительности времени загрузки изображений Jpa - PullRequest
1 голос
/ 02 ноября 2011

У меня есть приложение, которое должно обрабатывать список объектов (полученных из базы данных с использованием JPA), которые содержат сериализованное изображение.

Проблема заключается в том, что, когда я получаю около 50 экземпляров этого объекта, хранящихся вВ базе данных становится довольно медленно загружать 50 изображений из базы данных (~ 5 секунд), что раздражает пользователя.

Есть ли способ установить этот столбец из базы данных для отложенной инициализации?Или я должен создать отдельный объект для переноса изображения и ссылаться на него, используя идентификатор?

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Hibernate по крайней мере допускает ленивые столбцы (используя атрибут fetch аннотации @Basic), но я не думаю, что это поддерживается всеми поставщиками JPA.

Действительно ли необходимо хранить изображения в базе данных? Часто более эффективно хранить их в файловой системе и просто сохранять пути в базе данных.

0 голосов
/ 02 ноября 2011

Да, есть ссылка на свойства для загрузки.

 @Basic(fetch = FetchType.LAZY)
 private String myBigString;

Из спецификации JPA 2.0

11.1.6 Базовая аннотация Базовая аннотация - это простейший тип отображения столбца базы данных. Основная аннотация может быть применена к постоянное свойство или переменная экземпляра любого из следующих типы: примитивные типы Java, обертки примитивных типов, java.lang.String, java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.Timestamp, byte [], Byte [], char [], Character [], enums и любой другой тип, который реализует Сериализуемый.

...

Перечисление FetchType определяет стратегии получения данных из база данных: публичное перечисление FetchType {LAZY, EAGER};

...

Стратегия LAZY - это подсказка для среды выполнения персистентного провайдера, которая данные должны извлекаться лениво при первом обращении к ним. Реализация разрешено охотно получать данные, для которых ленивый Стратегия подсказка была указана. В частности, ленивая загрузка может быть доступным только для базовых отображений, для которых доступ на основе свойств используется.


Еще одна техника должна иметь второе отображение той же таблицы, но только с нужными вам атрибутами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...