Пример фильтра данных Hibernate - XML ​​и аннотации

Пример фильтра данных 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.