2010-11-23 2 views
2

In einer App mit Wicket + Spring + JPA/Hibernate-Stack habe ich eine Inbox/Search-Seite, die ziemlich komplexe Suchfunktionen haben sollte, wo in einer Datenbank gespeicherte Datensätze gefiltert werden mit einer Vielzahl von Filteroptionen. Bis jetzt habe ich JPA Criteria API verwendet, um die Datenbankabfrage zu erstellen, aber es wird ziemlich unordentlich. Ich habe mich gefragt, ob die Hibernate-Suche dafür geeignet wäre, obwohl ich keine Volltextsuchfunktionen benötige. Ich habe das Gefühl (aufgrund dessen, was ich darüber gelesen habe), dass die Abfrage etwas einfacher sein könnte.Verwenden der Hibernate-Suche für komplexe Abfragen anstelle von Kriterien API

Antwort

1

Entschuldigung, aber Hibernate Search basiert auf Lucence. Es ist nicht nur eine andere Abfragesprache.

Lucene sucht nicht nach Entitäten in Ihrer Datenbank, es sucht nach Attributen im Lucene-Index. Hibernate Search fügt die Funktionalität hinzu, um die Entitäten von Ihrer Datenbank mit dem Lucene-Index zu verbinden.

Hibernate Search und Lucene sind Create-Tool, wenn Sie erweiterte Volltextsuche benötigen. Aber wenn Sie es nicht brauchen, ist es nur eine Menge unnötiger Arbeit (und Probleme).

Solange Sie Lucene nicht verwenden, entspricht die Hibernate-Suche nicht Ihren Anforderungen.

+0

"Solange Sie Lucene nicht verwenden, passt die Hibernate-Suche nicht zu Ihren Anforderungen." - scheint mir eine merkwürdige Aussage. Ob ich Lucene verwende oder nicht, hat nichts damit zu tun, ob die Hibernate-Suche nützlich ist. Wichtig ist, ob Sie eine Volltextsuche in Verbindung mit Hibernate Core benötigen. In diesem Fall ist die Hibernate-Suche für Sie geeignet. (Und ja, es kommt auf Lucene an). – Hardy

0

Der primäre Anwendungsfall für die Hibernate-Suche ist die Volltextsuche. Es kann jedoch auch zum Indexieren/Suchen einfacher Attribute/Kriterien verwendet werden. Ob die Syntax zum Schreiben der Abfragen einfacher ist als eine Kriterienabfrage, ist Geschmackssache. Wenn Sie nicht die Volltextsuchfunktionen verwenden, müssen Sie berücksichtigen, dass Sie einen zusätzlichen Schritt in Ihrer Anwendung hinzufügen. Die Suchanfrage wird auf den Lucene-Index angewendet, der die Entity-IDs zurückgibt (sofern keine Projektion verwendet wird). Die übereinstimmenden Entitäten werden dann aus der Datenbank abgerufen. Auf der anderen Seite, wenn Sie Hibernate Search verwenden, ist es einfach, Ihre Suche zu "verbessern", indem Sie einige Ihrer Volltextsuchfunktionen zu Ihren Kriterien hinzufügen (wenn möglich).

Ob Sie Search verwenden oder nicht, ich denke, der Schlüssel ist, eine Art Framework zu schreiben, das Ihre Abfragen - Such- oder Kriterienabfragen - programmatisch aufbaut.

Verwandte Themen