Obs: Este tópico possui uma ótima discussão à respeito de herança e como ela pode ser prejudicial ao seu código.
Vamos supor que tenhamos o conceito de notificável em nosso sistema e queremos buscar por todas as entidades "notificáveis".
Como posso ter diversas entidades notificáveis que não fazem parte de uma hierarquia seria um erro usar herança. Então implementamos Notificavel como uma interface.
public interface Notificavel { public void notifica(); }
Suponhamos que temos duas entidades em que serão notificáveis: Sistema e Pessoa.
@Entity public class Sistema implements Notificavel { ...
@Entity public class Pessoa implements Notificavel { ...
Então realizamos a busca com a seguinte HQL:
String hql = "FROM br.com.renan.domain.Notificavel";
Note que colocamos o nome totalmente qualificado da interface, isso é necessário para que o hibernate saiba exatamente por qual interface buscamos.
Note que assim você consegue buscar por todas as entidades que implementem a inteface.
E por fim o teste:
E por fim o teste:
@Test public void deveRetornarDoisVeiculos() { Listnotificaveis = notificador.lista(); assertEquals(2, notificaveis.size()); }
Aqui é possível encontrar o código completo do projeto.
Abraços.
Acho que sua busca hql deveria ser assim
ResponderExcluirString hql = "FROM br.com.renan.domain.Notificavel";
!?
Excelente Marcos Eduardo, corrigido!
ResponderExcluir