アプリケーション全体でHibernateSearch(4.1)を使用してリソースの検索とインデックス作成を管理しますが、インデックス内の「計算された」値を管理する必要がある場合があります。たとえば、実際のプロパティのないゲッターにアタッチされた@IndexEmbeddedまたは@Fieldの呼び出しです。
public class Resource {
@ManyToMany(...)
private List<Keyword> keywords = new ArrayList<Keyword>();
public List<Keyword> getKeywords() {
return keywords;
}
public List<Keyword> setKeywords(List<Keyword> keyword>) {
this.keywords=keywords;
};
@IndexedEmbedded
public List<Keyword> getIndexedKeywords() {
List<Keyword> toReturn = new ArrayList<Keyword>();
for (Keyword keyword: getKeywords()) {
if (keyword.isIndexed) {
toReturn.add(keyword);
}
}
return toReturn;
}
}
..。
public void saveResource(Resource resource, Collection<Keyword> keywords) {
resource.getKeywords().retainAll(keywords);
resource.getKeywords().addAll(keywords);
session.saveOrUpdate(resource);
// will trigger a persist in the database correctly, but will not trigger a reindex
};
ただし、saveResourceを呼び出しても、HibernateSearchのインデックスは再作成されません。いけませんか?