我開始使用Spring Boot和Spring Data的Hibernate Search/Lucene,但我沒有得到更新的索引問題(使用Luke工具進行檢查)。Lucene索引沒有更新與Hibernate搜索和彈簧數據
我在我的域中有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;
}
當我明確地呼籲索引startAndWait()
(org.hibernate.search.MassIndexer
),那麼一切如預期的那樣。它包含字段name
,description
,documents.componentName
和documents.manufacturer.name
。
然而,當我現在通過我的@RestController
類調用到Spring數據CrudRepository
類,指數做更新改變直接場的Datasheet
(例如名稱或說明)當只有變化。改變DatasheetDocument
實例不更新該索引。任何想法,爲什麼這可能是?
請注意,我已嘗試向父級添加反向引用。對於DatasheetDocument
:
@ManyToOne
@ContainedIn
private Datasheet m_datasheet;
而對於Manufacturer
:
@ManyToMany
@ContainedIn
private Set<DatasheetDocument> m_datasheetDocuments;
但是,這並不能幫助。
我使用的Spring引導1.0.1包括休眠4.3.1。我添加了Hibernate Search 4.5.1。我看到Lucense 3.6.2也被傳遞了。