Ajuda para fazer select com parâmetros no JPA

Pessoal,

Estou trabalhando com JPA pela primeira vez e estou com dificuldades para realizar um select passando parâmetros (usar o where). Tentei fazer de acordo com o código abaixo (exemplo encontrado na internet), mas na hora de setar o Path está dando erro (IllegalArgumentException).


CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery();
cq.select(cq.from(TbTranTransacao.class));
Root root = cq.from(TbTranTransacao.class);
for (Object objKey : params.keySet()) {
  Path att = root.get(objKey.toString());
  cq.where(cb.equal(att, params.get(objKey)));
}
Query q = em.createQuery(cq);
q.setMaxResults(maxResults);
q.setFirstResult(firstResult);
return q.getResultList();
Exception in thread "main" java.lang.IllegalArgumentException: The attribute [TRAN_FL_ATIVA] from the managed type [EntityTypeImpl@25934689:TbTranTransacao [ javaType: class br.com.banestes.sonda.jpa.entity.TbTranTransacao descriptor: RelationalDescriptor(br.com.banestes.sonda.jpa.entity.TbTranTransacao --> [DatabaseTable(tb_tran_transacao)]), mappings: 6]] is not present.
        at org.eclipse.persistence.internal.jpa.metamodel.ManagedTypeImpl.getAttribute(ManagedTypeImpl.java:137)
        at org.eclipse.persistence.internal.jpa.querydef.FromImpl.get(FromImpl.java:312)
        at br.com.banestes.sonda.jpa.controller.TbTranTransacaoJpaController.findTbTranTransacaoEntitiesByCriteria(TbTranTransacaoJpaController.java:247)
        at br.com.banestes.sonda.jpa.controller.TbTranTransacaoJpaController.findTbTranTransacaoEntitiesByCriteria(TbTranTransacaoJpaController.java:229)

Já verifiquei o nome da coluna e está correto, não sei mais o que pode ser. Para falar a verdade eu não entendi bem o que essa exception quer dizer.
Agora estou trabalhando na mesma solução porém usando o createQuery com o SQL do JPA, mas acredito que exista uma forma nativa (a que tentei acima) muito mais intuitiva de usar.

Help…

Olá, poste por favor o código da classe br.com.banestes.sonda.jpa.entity.TbTranTransacao para darmos uma olhada.

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@Table(name = "tb_tran_transacao")
@NamedQueries({
    @NamedQuery(name = "TbTranTransacao.findAll", query = "SELECT t FROM TbTranTransacao t"),
    @NamedQuery(name = "TbTranTransacao.findByTranCdTransacao", query = "SELECT t FROM TbTranTransacao t WHERE t.tranCdTransacao = :tranCdTransacao"),
    @NamedQuery(name = "TbTranTransacao.findByTranFlIb", query = "SELECT t FROM TbTranTransacao t WHERE t.tranFlIb = :tranFlIb"),
    @NamedQuery(name = "TbTranTransacao.findByTranFlAtiva", query = "SELECT t FROM TbTranTransacao t WHERE t.tranFlAtiva = :tranFlAtiva"),
    @NamedQuery(name = "TbTranTransacao.findByTranUrlTransacao", query = "SELECT t FROM TbTranTransacao t WHERE t.tranUrlTransacao = :tranUrlTransacao")})
public class TbTranTransacao implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "TRAN_CD_TRANSACAO")
    private Integer tranCdTransacao;
    @Basic(optional = false)
    @Column(name = "TRAN_FL_IB")
    private boolean tranFlIb;
    @Basic(optional = false)
    @Column(name = "TRAN_FL_ATIVA")
    private boolean tranFlAtiva;
    @Basic(optional = false)
    @Column(name = "TRAN_URL_TRANSACAO")
    private String tranUrlTransacao;
    @JoinColumn(name = "TRAN_CD_TIPO", referencedColumnName = "TPS_CD_SERVICO")
    @ManyToOne(optional = false)
    private TbTpsTipoServico tranCdTipo;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "tbTranTransacao")
    private Collection<TbParTranParametrosTransacoes> tbParTranParametrosTransacoesCollection;

    public TbTranTransacao() {
    }

    public TbTranTransacao(Integer tranCdTransacao) {
        this.tranCdTransacao = tranCdTransacao;
    }

    public TbTranTransacao(Integer tranCdTransacao, boolean tranFlIb, boolean tranFlAtiva, String tranUrlTransacao) {
        this.tranCdTransacao = tranCdTransacao;
        this.tranFlIb = tranFlIb;
        this.tranFlAtiva = tranFlAtiva;
        this.tranUrlTransacao = tranUrlTransacao;
    }

    public Integer getTranCdTransacao() {
        return tranCdTransacao;
    }

    public void setTranCdTransacao(Integer tranCdTransacao) {
        this.tranCdTransacao = tranCdTransacao;
    }

    public boolean getTranFlIb() {
        return tranFlIb;
    }

    public void setTranFlIb(boolean tranFlIb) {
        this.tranFlIb = tranFlIb;
    }

    public boolean getTranFlAtiva() {
        return tranFlAtiva;
    }

    public void setTranFlAtiva(boolean tranFlAtiva) {
        this.tranFlAtiva = tranFlAtiva;
    }

    public String getTranUrlTransacao() {
        return tranUrlTransacao;
    }

    public void setTranUrlTransacao(String tranUrlTransacao) {
        this.tranUrlTransacao = tranUrlTransacao;
    }

    public TbTpsTipoServico getTranCdTipo() {
        return tranCdTipo;
    }

    public void setTranCdTipo(TbTpsTipoServico tranCdTipo) {
        this.tranCdTipo = tranCdTipo;
    }

    public Collection<TbParTranParametrosTransacoes> getTbParTranParametrosTransacoesCollection() {
        return tbParTranParametrosTransacoesCollection;
    }

    public void setTbParTranParametrosTransacoesCollection(Collection<TbParTranParametrosTransacoes> tbParTranParametrosTransacoesCollection) {
        this.tbParTranParametrosTransacoesCollection = tbParTranParametrosTransacoesCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (tranCdTransacao != null ? tranCdTransacao.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof TbTranTransacao)) {
            return false;
        }
        TbTranTransacao other = (TbTranTransacao) object;
        if ((this.tranCdTransacao == null && other.tranCdTransacao != null) || (this.tranCdTransacao != null && !this.tranCdTransacao.equals(other.tranCdTransacao))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.banestes.sonda.jpa.entity.TbTranTransacao[tranCdTransacao=" + tranCdTransacao + "]";
    }

}

Descobri o problema. Quando eu tentava setar o path estava passando o nome da coluna na tabela e não o nome do atributo do entity.