2016-06-05 9 views
0

Ich habe eine indizierte Einheit, wie unten:Hibernate-Suchverhalten?

@MappedSuperclass 
public static class Model{ 

@Id 
@GeneratedValue(strategy=GenerationType.Identity) 
private Integer id; 

private boolean isDeleted; 

} 

und die indizierte Klasse:

@Entity 
@Table("USERS") 
@Indexed 
public class ProductModel extends Model{ 

@Field 
private String name; 

//getters & setters 

} 

Nun, als ich auf ProductModel eine Forschung zu tun, bekomme ich den Wert der Flagge isDeleted während es ist nicht mit @Field annotiert.

Ich frage, ob dies ein normales Verhalten ist, tut Hibernate-Suche Index das gesamte Objekt Oder holt es die fehlenden Daten aus der Datenbank, brauche ich eine Erklärung für dieses Verhalten bitte.

Antwort

1

Hibernate Search speichert im Index nur die Felder, die Sie explizit deklarieren (genauer gesagt indiziert es standardmäßig und Sie können Hibernate Search bitten, es zu speichern, indem Sie der @ Field-Anmerkung die Speicheroption hinzufügen).

Sie beobachten, dass die Hibernate Search die Objekte nach der Suche mit den Informationen der Datenbank hydratisiert. Dies ist eines der Hauptinteressen bei der Verwendung der Hibernate-Suche: Die zurückgegebenen Objekte sind verwaltete Entitäten.

+0

so was ist das genaue Verhalten, fragt es die Datenbank für jede Forschung ab? –

+1

Bei einer typischen Suche, ja, führt sie die Abfrage gegen die Lucene-Indizes aus und führt dann eine Abfrage/Abfragen in der Datenbank aus, um die verwalteten Entitäten zu erstellen. Der einzige Fall, in dem dies nicht der Fall ist, ist, wenn Sie eine Projektion verwenden, um bestimmte Felder zurückzugeben, die direkt im Index gespeichert sind. Wie ich bereits erwähnt habe, ist dies eines der schönen Dinge der Hibernate-Suche. –