【发布时间】:2014-04-14 15:04:11
【问题描述】:
我正在使用 Spring Boot 和 Spring Data 开始使用 Hibernate Search/Lucene,但我遇到了索引未更新的问题(使用 Luke 工具检查)。
我的域中有 3 个课程。这是Datasheet,我的根实体:
@Entity
@Indexed
public class Datasheet
{
@Id
@GeneratedValue()
private long m_id;
@Field(name="name")
private String m_name;
@Field(name="description")
private String m_description;
@IndexedEmbedded(prefix = "documents.")
@OneToMany(cascade = CascadeType.REMOVE)
private Set<DatasheetDocument> m_documents;
}
然后DatasheetDocument:
@Entity
public class DatasheetDocument
{
@Id
@GeneratedValue()
private long m_id;
private String m_originalFileName;
@Field(name="componentName")
private String m_componentName;
@IndexedEmbedded(prefix = "manufacturer.")
@ManyToOne
private Manufacturer m_manufacturer;
}
最后是Manufacturer:
@Entity
public class Manufacturer
{
@Id
@GeneratedValue()
private long m_id;
@Field(name="name", analyze = Analyze.NO)
private String m_name;
private String m_website;
}
当我在索引器 (org.hibernate.search.MassIndexer) 上显式调用 startAndWait() 时,索引中的所有内容都符合预期。它包含字段name、description、documents.componentName 和documents.manufacturer.name。
但是,当我现在通过调用 Spring Data CrudRepository 类的 @RestController 类进行更新时,索引仅会在更改 直接字段 Datasheet(例如名称或描述)。将某些内容更改为 DatasheetDocument 实例不会更新索引。知道为什么会这样吗?
请注意,我已尝试向父级添加反向引用。对于DatasheetDocument:
@ManyToOne
@ContainedIn
private Datasheet m_datasheet;
对于Manufacturer:
@ManyToMany
@ContainedIn
private Set<DatasheetDocument> m_datasheetDocuments;
但这无济于事。
我正在使用包含 Hibernate 4.3.1 的 Spring boot 1.0.1。我添加了 Hibernate Search 4.5.1。我看到 Lucense 3.6.2 也被传递添加。
【问题讨论】:
标签: java hibernate lucene hibernate-search spring-boot