indeks lucene nie jest synchronizowany, gdy jakakolwiek aktualizacja występuje w DB przez hibernację

Pracuję nad niektórymi materiałami POCHibernate Search na podstawie Lucene użycie poniżej env:

hibernate-search-engine-4.4.2.Final.jarlucene-core-3.6.2.jarMySQL 5.5Posługiwać się@Indexed adnotacja w klasie domeny.Posługiwać się@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO) nad polem.Posługiwać się@IndexedEmbedded nad kolekcją Instancji innej klasy domeny.

Zrobiłem jawne indeksowanieTYLKO na początku aplikacji(ponieważ jest to napisane w Hibernate Search API, że Hibernate Search przejrzyście indeksuje każdą jednostkę utrwaloną, zaktualizowaną lub usuniętą przez rdzeń Hibernate,Indeksowanie wyszukiwania hibernacyjnego) przez poniższy kod:

private static void doIndex() throws InterruptedException {
    Session session = HibernateSearchUtil.getSession();

    FullTextSession fullTextSession = Search.getFullTextSession(session);
    fullTextSession.createIndexer().startAndWait();

    fullTextSession.close();
}

Działa dobrze, gdy indeksowanie i wyszukiwanie odbywa się na już zaszczepionej bazie danych, a także podczas operacji tworzenia i usuwania za pomocą rdzenia hibernacyjnego w aplikacji.

Ale NIE w przypadku jakiejkolwiek operacji aktualizacji istniejących danych poprzez Hibernate Core, ponieważ nie otrzymuję zaktualizowanych danych, gdy przeszukuję to poprzez wyszukiwanie hibernacyjne.

Nie wiem, dlaczego to, czy jest to problem z wyszukiwaniem Hibernate, czy lucene, oznacza, że ​​żaden indeks NIE jest aktualizowany lub z innego powodu, z powodu którego nie uzyskuje się zaktualizowanego wyniku za pomocą wyszukiwania hibernacyjnego.

Klasa użytkownika:

@Entity
@Table(name = "user")
@Indexed
public class User implements java.io.Serializable {

private static final long serialVersionUID = 5753658991436258019L;
private Integer idUser;

@Field(index = Index.YES, analyze = Analyze.YES, norms = Norms.NO, store = Store.NO)
private String Name;

private Set<UserInfo> userInfos = new HashSet<UserInfo>(0);

public User() {
}

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "iduser", unique = true, nullable = false)
public Integer getIdUser() {
    return idUser;
}

public void setIdUser(Integer idUser) {
    this.idUser = idUser;
}

@Column(name = "name", nullable = false, length = 256)
public String getName() {
    return this.Name;
}

public void setName(String tenantName) {
    this.Name = tenantName;
}

@IndexedEmbedded
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user")
public Set<UserInfo> getUserInfos() {
    return userInfos;
}

public void setUserInfos(Set<UserInfo> userInfos) {
    this.userInfos = userInfos;
    }
}

Klasa UserInfo:

@Entity
@Table(name = "userInfo")
public class UserInfo implements java.io.Serializable {

private static final long serialVersionUID = 5753658991436258019L;
private Integer iduserInfo;
private User user;
private String address; 

public UserInfo() {
}

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "iduserInfo", unique = true, nullable = false)
public Integer getIduserInfo() {
    return iduserInfo;
}

public void setIduserInfo(Integer iduserInfo) {
    this.iduserInfo = iduserInfo;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "userId", nullable = false)
public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO, norms=Norms.NO)
@Column(name = "address", nullable = false, length = 256)
public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}
}

questionAnswers(1)

yourAnswerToTheQuestion