Como faço para fazer um instanceof em uma query no JPA:
Ex.:
Query query = em.createQuery("from com.teste.Pessoa p where p instanceof com.teste.Usuario");
Tem como fazer algo do tipo?
Como faço para fazer um instanceof em uma query no JPA:
Ex.:
Query query = em.createQuery("from com.teste.Pessoa p where p instanceof com.teste.Usuario");
Tem como fazer algo do tipo?
Explica melhor qual é a tua necessidade!
Eu preciso saber se um objeto é filho de outro.
Tenho uma classe Pessoa e uma Usuario que herda de Pessoa.
Surgiu a nescessidade de em uma query recuperar todas as Pessoas que forem Usuarias
E no seu mapeamento da herança, você não colocou um DiscriminatorValue na subclasse?
sim coloquei
Mais como faço para fazer essa verificação?
ele não deixa isso:
e nem assim
to usando Hibernate + JPA
Você já tentou fazer assim ?
cara é um pouco mais complicado:
na verdade tenho uma classe Usuario que tem um atributo do tipo Pessoa, e essa Pessoa pode ser, Funcionario, Gerente ou Administrador, ambos filhos de Pessoa.
Tenho que criar uma query que me retorne todos os usuários que as pessoas são Gerentes (isso é um exemplo)
Query query = em.createQuery("from Usuario u where u.pessoa instanceof Gerente");
Sim tem como eu retornar todos e depois comparar, só que quando eu tiver 500 mil usuários, e apenas 50 gerentes vai ficar meio "pesado", não concorda?
Poderia fazer assim
ArrayList<Usuario> usuarios = new ArrayList<Usuarios>();
Query query = em.createQuery("from Usuario");
List<Usuario> aux = (List<Usuario>) query.getResultList();
for(Usuario u : aux){
if(u.getPessoa() instanceof Gerente)
usuarios.add(u);
}
Só que fica meio "Bacalhau". Não concorda?????
@Entity
@Table(name = "PROJETO")
@SequenceGenerator(name = "SE_PROJETO", sequenceName = "SE_PROJETO")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TIPO_PLC", discriminatorType = DiscriminatorType.STRING, length = 2)
public class Projeto{
@Id
private Long id;
//mais atributos
}
@Entity
@DiscriminatorValue("EC")
public class ProjetoExtraConvenio extends Projeto {
//mais atributos
}
@Entity
@DiscriminatorValue("CV")
public class ProjetoConvenio extends Projeto {
//mais atributos
}
//Minha consulta tá dessa forma
select pv.identificacao from ProjetoExtraConvenio pv
//select gerado
select
projetoext0_.IDENTIFICACAO as col_0_0_
from
PROJETO projetoext0_
where
projetoext0_.TIPO_PLC='EC'
Acho que era pra funcionar numa boa!!
Valeu
cara funciona sim…
Mais eu quero fazer um instanceof em uma query, eu “preciso”. To perguntando se dá pra fazer…
Se não sabe também deixa alguém que saiba responder…
Se não precisa, consequentemente não tem. E com certeza não irei responder mais nenhuma dúvida sua!
Alguem???