2011-09-14 2 views
4

У меня похожая ситуация, как this oneHibernate 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; 
    ... 
} 

Сейчас проблема заключается в следующем: Если изменить, например, имя поле в сущности Место, какие объекты будут Переиндексирован?

1) Только имя поле?

2) Целый Место предприятие?

3) Весь Место сущность и субъекты с аннотацией @IndexedEmbedded?

Тот, который мне нужен для моей цели, будет третьим. Так что, если это не стандарт, может ли быть какое-то решение для достижения такого поведения?

ответ

4

К счастью, это действительно третья, поэтому мне повезло, и она работает, как ожидалось.

0

Вы можете использовать следующий код повторно индексирование Место Entity вручную

public void updateIndex(T entity){ 
     FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em); 
     fullTextEntityManager.index(entity); 
     fullTextEntityManager.getSearchFactory().optimize(entity.getClass()); 
    } 

Во-вторых, если вы используете спящий режим можно настроить Lucene в persistence.xml для автоматического обновления индексов субъектов, которые изменены

+0

На самом деле это не то, что я ищу. Меня интересовал автоматический процесс – Hons

+0

Можете привести пример этой конфигурации? – alexander