Пример фильтра данных 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 Set getStockDailyRecords() {
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);
Set sets = 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.