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