我刚刚开始研究Hibernate Search。我有关于更新索引的问题。首先,我索引具有@Indexed注释的实体。当我更改一个其他实体属性的字段时,我可以观察到更新实体索引的这种变化。但我无法观察到其他具有已更改实体属性的索引实体的更改。
相关课程:客户,公司和团体
客户端类:
@Entity
@Indexed
@Analyzer(impl = org.apache.lucene.analysis.standard.StandardAnalyzer.class)
public class Client implements Serializable {
...
@IndexEmbedded(includePaths = {"name"})
@OneToOne
private Body body;
...
}
公司类:
@Entity
@Indexed
@Analyzer(impl = org.apache.lucene.analysis.standard.StandardAnalyzer.class)
public class Company implements Serializable {
...
@IndexEmbedded(includePaths = {"body.name"})
@OneToMany
private Client client;
...
}
身体类:
@Entity
public class Body implements Serializable {
...
@Field(index = YES, analyze = Analyze.YES, store = Store.YES)
private String name;
...
}
我手动更新索引。守则:
public void save(Object entity, Long id) {
FullTextEntityManager ftem = EntityManagerUtil.getFullTextEntityManager();
EntityManagerUtil.beginTransactionForFullText(ftem);
entity = ftem.find(entity.getClass(), id);
ftem.index(entity);
ftem.flushToIndexes();
ftem.clear();
EntityManagerUtil.commitTransactionForFullText(ftem);
}
在此示例中,当我在Client实例中更改body的名称时,Client实例的索引会正确更新。我将Client实例参数发送到我的save方法。但是,如果此客户端是Company实例的属性,则无法观察到公司索引的任何更改。我不使用双向关系。如何在不使用索引中的双向关系的情况下观察所有相关更改?