Фильтрация в памяти несохраняемой коллекции с помощью Hibernate - PullRequest
1 голос
/ 11 июня 2009

Хорошо. То, что я хотел, было: С Hibernate, чтобы загрузить один раз список объектов MyEntity и иметь этот список в качестве внутренних данных модели jtable. У меня также есть jTextField, и когда ключ набирается, я вызываю метод моей модели, который принимает текст поля jtext в качестве аргумента и фильтрует внутренний список MyEntitys и запускает событие изменения табличной модели. Я хочу сделать эту фильтрацию, не обращаясь к базе данных каждый раз.

То, что я сделал, было: Я сохранил 2 списка внутри модели: один с именем initialList, который был только один раз загружен с помощью createCriteria (...). List (), и второй список с именем FilterList, который всякий раз, когда вызывался метод refresh, заполнялся следующим образом:

public void refresh(String filterText)
{
   filteredList = session.createFilter(initialList, "where property= ?")
     .setParameter( 0, filterText)
    .list();
}

Затем я использовал этот отфильтрованный список, чтобы дать jtable значение строки, столбца. Ну, это не сработало, потому что Hibernate говорит, что API фильтра можно использовать только в постоянных коллекциях. Итак, у меня есть следующие 3 вопроса:

  1. Essentialy Если я создам фиктивную родительскую сущность (вместе с фиктивной родительской таблицей в базе данных), которая будет содержать все строки MyEntity в качестве дочерней коллекции, и загрузит эту родительскую фиктивную сущность, это будет работать? Если да, это звучит глупо, просто чтобы спящий режим считал коллекцию постоянным и позволил мне использовать фильтр. Чего мне не хватает?
  2. Предположим, у меня есть постоянная коллекция и я использую API-фильтр, гарантирует ли это, что я никогда не попаду в базу данных, кроме как при начальной загрузке? Меня не волнует обновление, просто загрузите один раз, а затем отфильтруйте БЫСТРО, потому что мне нужно фильтровать каждый раз, когда пользователь нажимает клавишу.
  3. Есть ли другой способ получить эту функциональность. Я полагаю, я мог бы вручную использовать API Java Collections для сортировки индекса фильтра и прочего, но любым другим готовым способом?

Заранее спасибо.

1 Ответ

1 голос
/ 11 июня 2009

Не уверен насчет # 1, но это может сработать ...

Я бы порекомендовал посмотреть, возможно, на commons-collection (CollectionsUtils) и выполнить фильтрацию в памяти, как вам нужно

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

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