2009-06-10 3 views
1

Ok. Was ich wollte war: Mit Hibernate, um einmal eine Liste von MyEntity-Objekten zu laden und diese Liste als interne Daten eines Modells einer Jtable zu haben. Ich habe auch ein jTextField und wenn ein Schlüssel getippt wird, rufe ich eine Methode meines Modells auf, die den Text des jtextfield als Argument nimmt und die interne Liste von MyEntititys filtert und das tablemodel change Ereignis feuert. Ich möchte diese Filterung durchführen, ohne die Datenbank jedes Mal zu treffen.Im Speicher Filterung nicht persistent Sammlung mit Hibernate

Was ich getan habe war: Ich behielt 2 Listen innerhalb des Modells: Die eine namens initialList, die nur einmal mit createCriteria (...). List() geladen wurde, und eine zweite Liste filteredList, die immer Refresh-Methode wurde es wurde bevölkert wie folgt aufgerufen:

public void refresh(String filterText) 
{ 
    filteredList = session.createFilter(initialList, "where property= ?") 
    .setParameter(0, filterText) 
    .list(); 
} 

Dann habe ich diese gefilterten Liste die jtable die Zeile, Spalte Wert zu geben. Nun, es hat nicht funktioniert, weil Hibernate sagt, dass das Filter-API-Zeug nur in persistenten Sammlungen verwendet werden kann. So habe ich die folgenden drei Fragen:

  1. essentialy Wenn ich erstellen Sie eine Dummy-Mutterunternehmen (zusammen mit dem Dummy übergeordneten Tabelle in der Datenbank), die alle der MyEntity Reihen als Kind Sammlung und laden diese Mutter Dummy Einheit enthalten , das wird funktionieren? Wenn ja, klingt es albern, dies zu tun, nur um den Winterschlaf zu halten, betrachten Sie die Sammlung als persistent und lassen Sie mich das Filter Zeug verwenden. Was vermisse ich?
  2. Angenommen, ich habe eine persistente Sammlung und verwenden Sie die Filter-API, garantiert dies, dass ich nie die Datenbank treffen wird, außer beim ersten Laden? Es ist mir egal, aktualisiert zu werden, einfach einmal laden und dann SCHNELL filtern, weil ich jedes Mal filtern muss, wenn der Benutzer eine Taste drückt.
  3. Gibt es eine andere Möglichkeit, diese Funktionalität zu erhalten. Ich nehme an, dass ich die Java-Auflistungs-API manuell verwenden könnte, um Filterindex und Sachen zu sortieren, aber jede andere bereitgestellte Weise?

Vielen Dank im Voraus.

Antwort

1

Nicht sicher # 1, aber es könnte funktionieren ...

Ich würde vielleicht (CollectionsUtils) bei commons-Sammlung empfehlen, sich und tun, um die Filterung im Speicher, wie Sie

Auch müssen sich auf die Anfragen je Wenn Sie dies tun, verhindert der Cache der zweiten Ebene möglicherweise den Zugriff auf die Datenbank, wenn er richtig konfiguriert ist.