Hibernate Search @IndexedEmbedded - PullRequest
       2

Hibernate Search @IndexedEmbedded

4 голосов
/ 14 сентября 2011

У меня похожая ситуация, как эта

@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 в сущности Place , какие сущности будут реиндексироваться?

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

2) Целое Место Сущность?

3) Весь объект Place и объекты, отмеченные @ IndexedEmbedded ?

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

Ответы [ 2 ]

4 голосов
/ 15 декабря 2011

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

0 голосов
/ 03 декабря 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...