Problemas com Hibernate - Por favor se alguém souber

1 resposta
marcelomello

Olá a todos,

Tenho a seguinte classe mãe:

@MappedSuperclass 
public class Teste implements Serializable  {

    private static final long serialVersionUID = 1L;
    private Integer codTeste;
    private Integer codEstacao;

    //getters and setters...
}

E a seguinte classe filha:

@Entity
@Table(name = "teste_range")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class TesteRange extends Teste {

    private static final long serialVersionUID = 1L;
    private Integer intervalo;

    //getters and setters...
}

Quero consultar os testes range que pertencem a estação 1. Para isso uso a classe org.hibernate.criterion.Example
conforme código abaixo:

TesteRange tr = new TesteRange();
tr.setCodEstacao(1);
Criteria c = session.createCriteria(TesteRange.class);
Example ex = Example.create(tr);
c.add(ex);
List<TesteRange> results = (List<TesteRange>) c.list();

Não dá erro. O problema é que sempre retorna TODOS os registros e não somente os com estação igual a 1. Tentei filtrar pelo campo “codTeste” (também herdado de Teste) e também retorna todos os registros e não somente aqueles que atendem ao filtro informado. Se filtro pelo campo “intervalo”, que não é herdado, funciona.

Alguém sabe se existe algum problema entre org.hibernate.criterion.Example e campos herdados?
Ou o que estou fazendo errado?

1 Resposta

H

Ola marcelomello,

Ao usar Criteria ele ignora todos os parametros setados, se quizer fazer uma pesquisa de “sujeito Homem” :slight_smile: use :

@NamedQueries({ @NamedQuery(name = "TesteRange.findById", query = "SELECT t FROM TesteRange t where t.codEstacao = :codEstacao")})
logo abaixo da tag @Entity da sua entidade mapeada.

Depois é só chama assim:

private EntityManager em; // pege o EntityManager do jeito que preferir

javax.persistence.Query query =  em.createNamedQuery("TesteRange.findById"); /*Coloquei o "javax.persistence" só para exemplo */

query.setParameter("codEstacao", codEstacaoQualquer);

List<TesteRange> result = (List<TesteRange>)query.getResultList();
Criado 26 de janeiro de 2011
Ultima resposta 26 de jan. de 2011
Respostas 1
Participantes 2