Exemple de filtre de données Hibernate - XML ​​et annotation

Exemple de filtre de données Hibernate - XML ​​et annotation

Le filtre de données Hibernate est un moyen innovant de filtrer les données récupérées de la base de données, de manière plus réutilisable et avec des règles de «visibilité». Le filtre de données a un nom unique, un accès global et accepte une valeur paramétrée pour la règle de filtrage, vous pouvez l'activer et la désactiver dans une session Hibernate.

Exemple de filtre de données de mise en veille prolongée

Dans cet exemple, il a défini un filtre de données et filtre les données de collecte avec la date spécifiée. Le filtre de données Hibernate peut être implémenté à la fois dans le fichier de mappage XML et dans les annotations.

1. Filtre de données en veille prolongée dans un fichier de mappage XML

Définissez un filtre de données avec le mot clé «filter-def» et acceptez un paramètre de date.


     
Exemple de mappage XML

Un exemple de fichier de mappage XML pour le déclarer et l'affecter à un ensemble de collections.


 
   ...
   
      
         
      
      
    
   
 

 
   
 

Danscondition=”date >= :stockRecordFilterParam”, la «date» est une propriété appartenant à «StockDailyRecord».

2. Filtre de données en veille prolongée dans l'annotation

Définissez un filtre de données avec le mot-clé «@FilterDef» et acceptez un paramètre de date avec@ParamDef.

@FilterDef(name="stockRecordFilter",
parameters=@ParamDef( name="stockRecordFilterParam", type="date" ) )
Exemple d'annotation

Un exemple de fichier d'annotation pour le déclarer et l'affecter à un ensemble de collections.

...
@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;
    }

Danscondition=”date >= :stockRecordFilterParam”, la «date» est une propriété appartenant à «StockDailyRecord».

Comment activer et désactiver le filtre de données

Activez le filtre de données.

Filter filter = session.enableFilter("stockRecordFilter");
filter.setParameter("stockRecordFilterParam", new Date());

Désactivez le filtre de données.

session.disableFilter("stockRecordFilter");

Application et mise en œuvre du filtre de date

Voici un extrait de code pour montrer comment appliquer et implémenter le filtre de données.

        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());
    }

Sortie

****** Enabled Filter ******
58
2010-01-31
****** Disabled Filter ******
60
2010-01-02
58
2010-01-31
63
2010-01-23
61
2010-01-03
...

Dans cet exemple (XML et annotation), une fois le filtre activé, toute sa collection ‘StockDailyRecord’ est filtrée par la date de votre paramètre.

P.S filter.setParameter(“stockRecordFilterParam”, new Date());, the current new Date is 2010-01-27.