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