Рубрики
Без рубрики

Пример фильтра данных гибернации – XML и аннотации

– Пример фильтра данных гибернации – XML и аннотации

Фильтр данных гибернации – это инновационный способ фильтрации данных, извлекаемых из базы данных, более удобным для повторного использования способом и правилами “видимости”. Фильтр данных имеет уникальное имя, глобальный доступ и принимает параметризованное значение для правила фильтра, вы можете включать и отключать его в сеансе гибернации.

Пример фильтра данных гибернации

В этом примере он определил фильтр данных и отфильтровал данные сбора с указанной датой. Фильтр данных гибернации может быть реализован как в файле сопоставления 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 Set getStockDailyRecords() {
		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);
        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 (“Параметр фильтра биржевых записей”, новые данные());, текущая новая дата – 2010-01-27.

Оригинал: “https://mkyong.com/hibernate/hibernate-data-filter-example-xml-and-annotation/”