Hibernate Search y Relaciones
-
11-10-2019 - |
Pregunta
Tengo un objeto llamado MyItemBean
que puede tener 0 o más asociados objetos KeywordBean
. Las clases resultantes tienen este aspecto:
@Entity
public class MyItemBean {
...stuff...
@ManyToMany(targetEntity = KeywordBean.class, cascade = CascadeType.PERSIST)
@JoinTable(name = "tbl_item_keyword", joinColumns = @JoinColumn(name = "item_id"), inverseJoinColumns = @JoinColumn(name = "keyword_id"))
private List<KeywordBean> keywords = null;
...more stuff...
}
@Entity
public class KeywordBean {
...stuff...
private String value=null;
...more stuff...
}
Estoy usando JBoss Seam / Hibernate búsqueda para indexar estos objetos para que pueda realizar consultas de búsqueda en contra de ellos. Me gustaría ser capaz de buscar casos MyItemBean
con un valor de palabra clave determinada. Esta relación, sin embargo, es unidireccional porque aplico KeywordBean
se opone a algo más que MyItemBean
. He mirado en la documentación de Hibernate Búsqueda de ejemplos sobre cómo las relaciones de índice, pero todos los ejemplos que proporcionan son bidireccionales. ¿Puede alguien decirme lo que necesito anotaciones para aplicar en MyItemBean.keywords
para indexar los valores de palabras clave correctamente?
Solución
La anotación de uso es IndexedEmbedded . Funciona bien con las asociaciones unidireccionales también. Un problema puede producirse si cambia el valor de KeywordBean Hibernate de búsqueda no tienen una manera de actualizar el índice para el MyItemBean instancias que hacen referencia al cambiado KeywordBean . En las relaciones bidireccionales puede utilizar @ContainedIn Para solucionar este problema, pero que realmente no necesita esto. Provisto en su caso de uso esta actualización restricción índice podría no ser un problema. Tal vez su KeywordBean no es cambiando. O si cambia puede volver a indexar todos KeywordBean * * s que se ven afectados de forma manual.
- Hardy