Beispiel für Datenfilter im Ruhezustand - XML und Annotation
Der Datenfilter für den Ruhezustand ist eine innovative Methode, um das Abrufen von Daten aus der Datenbank auf eine wiederverwendbarere Weise und nach Sichtbarkeitsregeln zu filtern. Der Datenfilter hat einen eindeutigen Namen, globalen Zugriff und akzeptiert parametrisierte Werte für die Filterregel. Sie können ihn in einer Ruhezustandssitzung aktivieren und deaktivieren.
Beispiel für einen Ruhezustand-Datenfilter
In diesem Beispiel wurde ein Datenfilter definiert und die Erfassungsdaten mit dem angegebenen Datum gefiltert. Der Ruhezustand-Datenfilter kann sowohl in XML-Zuordnungsdateien als auch in Anmerkungen implementiert werden.
1. Datenfilter für Ruhezustand in XML-Zuordnungsdatei
Definieren Sie einen Datenfilter mit dem Schlüsselwort 'filter-def' und akzeptieren Sie einen Datumsparameter.
XML-Mapping-Beispiel
Ein Beispiel für eine XML-Zuordnungsdatei zum Deklarieren und Zuweisen zu einem Sammlungssatz.
...
Incondition=”date >= :stockRecordFilterParam” ist das "Datum" eine Eigenschaft, die zu "StockDailyRecord" gehört.
2. Datenfilter für Ruhezustand in Annotation
Definieren Sie einen Datenfilter mit dem Schlüsselwort '@FilterDef' und akzeptieren Sie einen Datumsparameter mit@ParamDef.
@FilterDef(name="stockRecordFilter", parameters=@ParamDef( name="stockRecordFilterParam", type="date" ) )
Anmerkungsbeispiel
Beispiel für eine Anmerkungsdatei zum Deklarieren und Zuweisen zu einem Sammlungssatz.
... @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; }
Incondition=”date >= :stockRecordFilterParam” ist das "Datum" eine Eigenschaft, die zu "StockDailyRecord" gehört.
Aktivieren und Deaktivieren des Datenfilters
Aktivieren Sie den Datenfilter.
Filter filter = session.enableFilter("stockRecordFilter"); filter.setParameter("stockRecordFilterParam", new Date());
Deaktivieren Sie den Datenfilter.
session.disableFilter("stockRecordFilter");
Anwenden und Implementieren des Datumsfilters
Hier ist ein Codeausschnitt, der zeigt, wie der Datenfilter angewendet und implementiert wird.
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()); }
Ausgabe
****** Enabled Filter ****** 58 2010-01-31 ****** Disabled Filter ****** 60 2010-01-02 58 2010-01-31 63 2010-01-23 61 2010-01-03 ...
In diesem Beispiel (sowohl XML als auch Annotation) wird nach Aktivierung des Filters die gesamte "StockDailyRecord" -Auflistung nach Ihrem Parameterdatum gefiltert.
P.S filter.setParameter(“stockRecordFilterParam”, new Date());, the current new Date is 2010-01-27.