Фильтр данных гибернации – это инновационный способ фильтрации данных, извлекаемых из базы данных, более удобным для повторного использования способом и правилами “видимости”. Фильтр данных имеет уникальное имя, глобальный доступ и принимает параметризованное значение для правила фильтра, вы можете включать и отключать его в сеансе гибернации.
Пример фильтра данных гибернации
В этом примере он определил фильтр данных и отфильтровал данные сбора с указанной датой. Фильтр данных гибернации может быть реализован как в файле сопоставления XML, так и в аннотации.
1. Фильтр данных гибернации в файле сопоставления XML
Определите фильтр данных с помощью ключевого слова ‘ filter-def ‘ и примите параметр даты.
Пример сопоставления XML
Пример файла сопоставления XML для объявления и назначения его набору коллекций.
...
В условие=”дата >=: параметр фильтра биржевых записей” , “дата” – это свойство, принадлежащее “Биржевой записи”.
2. Фильтр данных гибернации в аннотации
Определите фильтр данных с помощью ключевого слова ” @Filtered ” и примите параметр даты с помощью @ParamDef .
@FilterDef(name="stockRecordFilter", parameters=@ParamDef( name="stockRecordFilterParam", type="date" ) )
Пример аннотации
Пример файла аннотации для объявления и назначения его набору коллекций.
... @Entity @FilterDef(name="stockRecordFilter", parameters=@ParamDef( name="stockRecordFilterParam", type="date" ) ) @Table(name = "stock", catalog = "mkyong") public class Stock implements java.io.Serializable { ... @OneToMany(fetch = FetchType.LAZY, mappedBy = "stock") @Filter( name = "stockRecordFilter", condition="date >= :stockRecordFilterParam" ) public SetgetStockDailyRecords() { return this.stockDailyRecords; }
В условие=”дата >=: параметр фильтра биржевых записей” , “дата” – это свойство, принадлежащее “Биржевой записи”.
Как включить и отключить фильтр данных
Включите фильтр данных.
Filter filter = session.enableFilter("stockRecordFilter"); filter.setParameter("stockRecordFilterParam", new Date());
Отключите фильтр данных.
session.disableFilter("stockRecordFilter");
Применение и реализация фильтра дат
Вот фрагмент кода, показывающий, как применять и реализовывать фильтр данных.
Session session = HibernateUtil.getSessionFactory().openSession(); System.out.println("****** Enabled Filter ******"); Filter filter = session.enableFilter("stockRecordFilter"); filter.setParameter("stockRecordFilterParam", new Date()); Stock stock = (Stock)session.get(Stock.class, 2); Setsets = stock.getStockDailyRecords(); for(StockDailyRecord sdr : sets){ System.out.println(sdr.getDailyRecordId()); System.out.println(sdr.getDate()); } System.out.println("****** Disabled Filter ******"); session.disableFilter("stockRecordFilter"); //clear the loaded instance and get Stock again, for demo only session.evict(stock); Stock stock2 = (Stock)session.get(Stock.class, 2); Set sets2 = stock2.getStockDailyRecords(); for(StockDailyRecord sdr : sets2){ System.out.println(sdr.getDailyRecordId()); System.out.println(sdr.getDate()); }
Выход
****** Enabled Filter ****** 58 2010-01-31 ****** Disabled Filter ****** 60 2010-01-02 58 2010-01-31 63 2010-01-23 61 2010-01-03 ...
В этом примере (как XML, так и аннотации) после включения фильтра вся его коллекция “Stockdailyrecord” фильтруется по дате вашего параметра.
P.S filter.setParameter (“Параметр фильтра биржевых записей”, новые данные());, текущая новая дата – 2010-01-27.
Оригинал: “https://mkyong.com/hibernate/hibernate-data-filter-example-xml-and-annotation/”