如何在Hibernate Search中更新实体

时间:2016-01-23 08:14:38

标签: java lucene hibernate-search

我刚刚开始研究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实例的属性,则无法观察到公司索引的任何更改。我不使用双向关系。如何在不使用索引中的双向关系的情况下观察所有相关更改?

0 个答案:

没有答案