2011-09-14 91 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

您可以使用下面的代碼來重新建立索引的地方實體手動

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

其次,如果你正在使用Hibernate,您可以在persistence.xml配置Lucene來自動更新改變實體的指標

+0

其實這不是我所期待的。我對自動過程感興趣 – Hons

+0

你可以舉一個這個配置的例子嗎? – alexander