Hibernate Search @IndexedEmbedded
У меня есть похожая ситуация, как Эта
@Entity
@Indexed
public class Place {
@Id
@GeneratedValue
@DocumentId
private Long id;
@Field( index = Index.TOKENIZED )
private String name;
@OneToOne( cascade = { CascadeType.PERSIST, CascadeType.REMOVE } )
@IndexedEmbedded
private Address address;
....
}
@Entity
public class Address {
@Id
@GeneratedValue
private Long id;
@Field(index=Index.TOKENIZED)
private String street;
@Field(index=Index.TOKENIZED)
private String city;
@ContainedIn
@OneToMany(mappedBy="address")
private Set<Place> places;
...
}
Теперь проблема заключается в следующем:
Если я изменю, например, поле name в entity Place , какие сущности будут повторно проиндексированы?
1) только поле name ?
2) целое место сущность?
3) Вся сущность места и сущности, аннотированные @IndexedEmbedded ?
Тот, кто мне нужен для моей цели, будет третьим. Так что если это не стандарт, может ли быть какое-либо решение для достижения такого поведения?
2 ответов:
Вы можете использовать следующий код для повторного индексирования объекта Place вручную
public void updateIndex(T entity){ FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em); fullTextEntityManager.index(entity); fullTextEntityManager.getSearchFactory().optimize(entity.getClass()); }Во-вторых, если вы используете hibernate, вы можете настроить lucene в
persistence.xmlдля автоматического обновления индексов изменяемых сущностей
Comments