Es gibt zwei Entitäten und die erste Entität wird in die zweite Entität referenziert.Zugriff auf Sortieren Feldname von Fremdschlüssel in Entität mit Hibernate Lucene Search?
Entity 1:
@Indexed
public abstract class Yesh implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID")
private Long id;
@Fields({ @Field(index = Index.YES, store = Store.NO), @Field(name = "YeshName_for_sort", index = Index.YES, analyzer = @Analyzer(definition = "customanalyzer")) })
@Column(name = "NAME", length = 100)
private String name;
public Yesh() {
}
public Yesh (Long id) {
this.id = id;
}
public Yesh (Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "com.Prac.Yesh[ id=" + id + " ]";
}
}
Entity 2:
public class Kash implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID")
private Long id;
@IndexedEmbedded
@ManyToOne
Yesh yes; //Contain reference to first entity
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Yesh getYes() {
return yes;
}
public void setId(Yesh yes) {
this.yes = yes;
}
}
Es gibt keine Annotation in Entity 2 auf Referenz Yesh ist; Entität 1 hat ein Feld mit dem Namen "YeshName_for_sort". Aber wenn ich versuche, über Feld zuzugreifen, wie in folgendem Beispiel gegeben:
Hauptklasse:
FullTextEntityManager ftem = Search.getFullTextEntityManager(factory.createEntityManager());
QueryBuilder qb = ftem.getSearchFactory().buildQueryBuilder().forEntity(Kash.class).get();
org.apache.lucene.search.Query query = qb.all().getQuery();
FullTextQuery fullTextQuery = ftem.createFullTextQuery(query, Kash.class);
//fullTextQuery.setSort(new Sort(new SortField("YeshName_for_sort", SortField.STRING, true)));
The above statement is not working and i have also tried to replace YeshName_for_sort with 'yes' reference but it is not working.
fullTextQuery.setFirstResult(0).setMaxResults(150);
int size = fullTextQuery.getResultSize();
List<Yesh> result = fullTextQuery.getResultList();
for (Yeshuser : result) {
logger.info("Yesh Name:" + user.getName());
}
Sortierung funktioniert nicht. Ich habe auch versucht, Aussagen zu ändern wie:
ftem.createFullTextQuery(query, Kash.class, Yesh.class); //added entity 1
oder
fullTextQuery.setSort(new Sort(new SortField("yes.name", SortField.STRING, true))); // Added property name for Yesh yes;
aber es funktioniert nicht.
Welche Annotationen müssen in Entitäten oder Änderungen im Hauptprogramm implementiert werden, um auf das Sortierfeld zugreifen zu können?
Danke. Sieht logisch aus. Habe gerade gesehen, dass die erste Entität (Yesh) abstrakt ist, also gibt sie -> "" Abstrakte Klassen können niemals Indexdokumente einfügen ""; der Grund, warum es nicht funktioniert. Ich habe das Kash indiziert, aber dasselbe Problem. Suche nach Möglichkeiten, es zu lösen.Wird einige Unterlagen darüber durchgehen. Wenn Sie irgendwelche Vorschläge haben, teilen Sie bitte – fatherazrael
Sie können nicht @ Indiziert auf eine abstrakte Klasse hinzufügen, müssen Sie die @ indiziert für jede untergeordnete Klassen definieren. Davon abgesehen können Sie nach einer abstrakten Klasse suchen, da die Hibernate Search Polymorphie unterstützt. –
Danke. Tat dies. Ich habe Luke benutzt und die Indexe überprüft und gefunden, dass es wie "yes.YeshName_for_sort" wie erwähnt gespeichert wird. Ich habe die abstrakte Entität nicht indiziert, aber sie zeigt immer noch keine sortierten Ergebnisse an. "Analyzer = @Analyzer (definition =" customanalyzer "))" funktioniert nicht in der abstrakten Klasse. Mehr dazu schauen. – fatherazrael