Пример фильтра данных Hibernate - XML и аннотации
Фильтр данных в спящем режиме - это инновационный способ фильтрации извлечения данных из базы данных более удобным для использования способом и правилами «видимости». Фильтр данных имеет уникальное имя, глобальный доступ и принимает параметризованное значение для правила фильтра, его можно включить и отключить в сеансе Hibernate.
Пример фильтра данных Hibernate
В этом примере он определил фильтр данных и отфильтровал данные сбора с указанной датой. Фильтр данных Hibernate может быть реализован как в файле отображения XML, так и в аннотации.
1. Фильтр данных гибернации в XML-файле отображения
Определите фильтр данных с ключевым словом «filter-def» и примите параметр даты.
Пример отображения XML
Пример файла сопоставления XML для объявления и назначения его набору набора.
...
Вcondition=”date >= :stockRecordFilterParam” "date" - это свойства, принадлежащие StockDailyRecord.
2. Фильтр данных гибернации в аннотации
Определите фильтр данных с ключевым словом «@FilterDef» и примите параметр даты с@ParamDef.
@FilterDef(name="stockRecordFilter", parameters=@ParamDef( name="stockRecordFilterParam", type="date" ) )
Пример аннотации
Пример файла аннотации для объявления и назначения его набору коллекций.
... @Entity @FilterDef(name="stockRecordFilter", parameters=@ParamDef( name="stockRecordFilterParam", type="date" ) ) @Table(name = "stock", catalog = "example") public class Stock implements java.io.Serializable { ... @OneToMany(fetch = FetchType.LAZY, mappedBy = "stock") @Filter( name = "stockRecordFilter", condition="date >= :stockRecordFilterParam" ) public SetgetStockDailyRecords() { return this.stockDailyRecords; }
Вcondition=”date >= :stockRecordFilterParam” "date" - это свойства, принадлежащие StockDailyRecord.
Как включить и отключить фильтр данных
Включить фильтр данных.
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(“stockRecordFilterParam”, new Date());, the current new Date is 2010-01-27.