Consulta de pesquisa de hibernação?
-
21-09-2019 - |
Pergunta
Saudações
Meu modelo de domínio é o seguinte
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;
}
Eu quero usar 'pesquisa de hibernação' para executar 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();
Estou me perguntando, já que as três classes têm o mesmo campo 'nome', ele pesquisa novamente todas as classes?
O 'resultado' tem objetos de todos os tipos?
Solução
Também depende de como você indexa. Se você indexar cada classe separadamente (o que significa que cada classe possui uma anotação @Indexed) e não especificar um tipo de classe esperado ao criar o FullTextQuery, você obtém classes mistas no resultado.
No entanto, no seu exemplo, você pode considerar usar @IndexedEmbedded no atributo famílias e membros. Nesse caso, os nomes de campo no Lucene Documentolavagem família.name e família.members.name.
Dê uma olhada na documentação on -line de pesquisa de hibernato e no recurso de indexação incorporada.
-Hardy
Outras dicas
Logicamente, sim, porque em nenhum lugar da consulta você especificou o tipo de objetos que deseja.
Se você deseja restringir os resultados a tipos específicos, precisa passar esses tipos como uma lista de vararg:
fullTextSession.createFullTextQuery( luceneQuery, A.class, B.class );
Isso é descrito nos documentos.