Может ли Hibernate вернуть коллекцию объектов результатов ДРУГОЕ, чем List? - PullRequest
3 голосов
/ 06 января 2009

Поддерживает ли Hibernate API результирующие наборы объектов в форме коллекции, отличной от List?

Например, у меня есть процесс, который запускает сотни тысяч итераций, чтобы создать некоторые данные для клиента. Этот процесс использует записи из таблицы значений (например) для создания этого вывода для каждой итерации.

Со списком мне пришлось бы перебирать весь список, чтобы найти определенное значение, которое стоит дорого. Я хотел бы иметь возможность вернуть TreeMap и указать ключ программно, чтобы я мог искать в коллекции конкретное значение, которое мне нужно. Может ли Hibernate сделать это для меня?

Ответы [ 4 ]

2 голосов
/ 06 января 2009

Я полагаю, вы имеете в виду метод Query.list(). Если так: нет, нет способа вернуть результаты верхнего уровня, кроме List. Если вы получаете слишком много результатов, почему бы не выполнить более ограниченный запрос к базе данных? Если запрос трудно ограничить, вы можете заполнить свой Map содержимым List в Hibernate, а затем выбросить список.

2 голосов
/ 06 января 2009

Если я правильно понимаю, вы загружаете кучу данных из базы данных в память и затем используете их локально, просматривая определенные объекты в этом списке.

Если это так, я вижу 2 варианта.

  1. Не загружайте все данные, но для каждой итерации обращайтесь к базе данных с запросом, возвращающим только нужную вам запись. Это сделает больше запросов к базе данных, поэтому, вероятно, будет медленнее, но с гораздо меньшим потреблением памяти. Это решение может быть легко улучшено добавлением кеша, так что большинство используемых значений будут получены быстро. Конечно, потребуется некоторое измерение производительности, но я обычно предпочитаю наивное решение с хорошим кешированием, поскольку кеш может быть реализован как перекрестная задача и очень прозрачен для программиста.
  2. Если вы действительно хотите загрузить все свои данные в память (что на самом деле является формой кэширования), время для преобразования ваших данных из списка в TreeMap (или любую другую эффективную структуру), вероятно, будет небольшим по сравнению с полная обработка. Таким образом, вы можете выполнить преобразование данных самостоятельно.

Как я уже сказал, в общем случае я бы предпочел решение с кэшированием ...

1 голос
/ 06 января 2009

Да, это можно сделать.

Однако вам, вероятно, понадобится реализовать класс вашего домена Comparable; Я не думаю, что вы можете сделать это с помощью Comparator.

Edit: Кажется, я неправильно понял вопрос. Если вы говорите о результате специального запроса, то вышесказанное вам не поможет. Возможно, можно заставить его работать, связав объект со свойством TreeMap с представлением базы данных, если запрос исправлен.

И, конечно, вы всегда можете построить карту самостоятельно, не затрачивая много времени на обработку и обработку.

1 голос
/ 06 января 2009

С Сохранение Java с Hibernate :

  • java.util.Map может быть сопоставлен с <map>, сохранение ключа и значения пар. Используйте java.util.HashMap для инициализировать свойство.
  • A java.util.SortedMap может быть сопоставлен с элементом <map> и сортировкой атрибут может быть установлен либо компаратор или естественный порядок для сортировка в памяти Инициализировать коллекция с java.util.TreeMap экземпляр.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...