El índice de Lucene no se sincroniza cuando se produce alguna actualización en la base de datos a través de hibernación

Estoy trabajando en algunas cosas de POC enBúsqueda de hibernación basada en lucene utilizando a continuación env:

hibernate-search-engine-4.4.2.Final.jarlucene-core-3.6.2.jarMySQL 5.5Utilizar@Indexed anotación en la clase de dominio.Utilizar@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO) sobre el campo.Utilizar@IndexedEmbedded sobre colección de instancia de diferente clase de dominio.

Hice indización explícitaSOLAMENTE al inicio de la aplicación(como está escrito en la API de Hibernate Search, Hibernate Search indexará de manera transparente cada entidad persistente, actualizada o eliminada a través de Hibernate Core,Hibernate Search Indexing) A través del siguiente código:

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

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

    fullTextSession.close();
}

Funciona bien cuando la indexación y la búsqueda se realizan en un DB ya sembrado, así como en la operación de creación y eliminación a través del núcleo de hibernación dentro de la aplicación.

Pero NO en ninguna operación de actualización de los datos existentes a través de Hibernate Core, ya que no estoy obteniendo los datos actualizados cuando hago una búsqueda a través de la búsqueda de hibernación.

No sé la razón, ya sea que se trate de un problema con Hibernate Search o lucene, significa que cualquiera de los índices NO se está actualizando o alguna otra razón por la cual no se obtiene el resultado actualizado a través de Hibernate Search.

Clase de usuario:

@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;
    }
}

Clase 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;
}
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta