Hibernate consulta de búsqueda?
-
21-09-2019 - |
Pregunta
Saludos
Mi modelo de dominio es el siguiente
class Species {
private String name;
..
..
List<Family> families;
}
class Family{
private String name;
private String locusId;
..
List<Member> members;
}
class Members{
private String name;
private String repTranscript;
}
Quiero usar 'Hibernate Buscar' para ejecutar consultas como
org.hibernate.lucene.search.Query luceneQuery = parser.parse( "name:ASpeciesName or name:AGroupName or locudID:someLocusID" );
org.hibernate.Query fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery );
List result = fullTextQuery.list();
Me pregunto, ya que las tres clases tienen un mismo campo 'nombre' Qué buscar agains todas las clases?
¿El 'resultado' tiene objetos de todos los tipos?
Solución
También depende de cómo se indexa. Si índice de cada clase por separado (es decir, cada clase tiene una anotación de @Indexed) y no especifica un tipo de clase esperado al crear el FullTextQuery se obtiene clases mixtas de hecho en el resultado.
Sin embargo, en su ejemplo, usted podría considerar el uso @IndexedEmbedded en el atributo familias y miembros . En este caso, los nombres de campo en la Lucene Documento s va a families.name y families.members.name .
Tener un vistazo a la documentación de Hibernate búsqueda en línea y la característica de indexación incrustado.
- Hardy
Otros consejos
Como es lógico, sí, porque en ninguna parte en la consulta tienen que especifica el tipo de objetos que desee.
Si desea restringir los resultados a tipos específicos, que necesita para aprobar esos tipos como una lista vararg:
fullTextSession.createFullTextQuery( luceneQuery, A.class, B.class );
Esto se describe en el docs .