Query JPA com where em campo do tipo List ou Set - RESOLVIDO

1 resposta
A

Ola a todos…

sou meio leigo ainda no assunto… e estou quebrando a cabeça para executar um select em uma entidade

gostaria de retornar os cargos que tem o cargo x como subordinado

campos da Entidade Cargo:

@Id
   @GeneratedValue(strategy=GenerationType.AUTO)
   private Long id;

   @Column(length=25, nullable=false)
   private String descricao;

   @ManyToMany(cascade={CascadeType.ALL})
   @JoinTable(name="cargo_subordinados", joinColumns = {
          @JoinColumn(name="cargo_id")
      }, inverseJoinColumns = {
          @JoinColumn(name="subordinado_id")
      })
   private Set<Cargo> subordinados

tentei dessa forma, mas da erro…

Set subordinados = new new HashSet();
subordinados.add(cargoX);

List cargos = cargoServico.buscarPorSubordinados(subordinados);

tambem mudei no where abaixo de = para like e para in, pq um cargo pode ter ‘N’ subordinados, mesmo assim da erro…

metodo em cargoServico:

public List<Cargo> buscarPorSubordinados(Set<Cargo> subordinados) {
       EntityManager manager = getEntityManager();
       String queryString = "select c from Cargo c";
       queryString += " where c.subordinados = :subordinados";

       Query query = manager.createQuery(queryString);

       query.setParameter("subordinados", subordinados);

       List<Cargo> cargos = query.getResultList();

       return cargos;
   }

quem poder me dar um help eu agradeço desde ja…

Andre Luis

1 Resposta

A

Consegui resolver usando queryNativa

para quem estiver passando pela mesma dificuldade, segue abaixo o codigo:

public List<Cargo> buscarPorSubordinados(Cargo cargo) {
        EntityManager manager = getEntityManager();

        String queryString = "select id as id, descricao as descricao from cargo c";
        queryString += " inner join cargo_subordinados s";
        queryString += " on c.id = s.cargo_id";
        queryString += " where s.subordinado_id = :id";

        Query query = manager.createNativeQuery(queryString, Cargo.class);

        query.setParameter("id", cargo.getId());

        List<Cargo> cargos = query.getResultList();

        return cargos;
    }
Criado 23 de novembro de 2008
Ultima resposta 24 de nov. de 2008
Respostas 1
Participantes 1