Consultar por JPA

Galera, eu tenho essa classe Abstract que gera a consulta de uma entidade, mas eu não estou conseguindo entender o que é gerado exatamente.
O cq.groupBy não é original da classe, modifiquei pra tentar gerar uma consulta com groupby, mas sem sucesso.

Ao alterar essa parte: @NamedQuery(name = “ParciaisEdesImobilizadas.findAll”, query = “SELECT p FROM ParciaisEdesImobilizadas p GROUP BY p.data”), O group by aqui também não teve efeito algum.

 public List<T> findAll() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        cq.groupBy(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }

Entidade:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.celg.entidade;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author paulo
 */
@Entity
@Table(name = "PARCIAIS_EDES_IMOBILIZADAS")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "ParciaisEdesImobilizadas.findAll", query = "SELECT p FROM ParciaisEdesImobilizadas p GROUP BY p.data"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findById", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.id = :id"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByData", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.data = :data"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByOdex", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.odex = :odex"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByDescricao", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.descricao = :descricao"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByDataInicio", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.dataInicio = :dataInicio"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByDataStatusConc", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.dataStatusConc = :dataStatusConc"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByValor", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.valor = :valor"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByValorObrigEspc", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.valorObrigEspc = :valorObrigEspc")})
public class ParciaisEdesImobilizadas implements Serializable {
    private static final long serialVersionUID = 1L;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Id
    @Basic(optional = false)
    @Column(name = "ID")
    private BigDecimal id;
    @Column(name = "DATA")
    private String data;
    @Column(name = "ODEX")
    private String odex;
    @Column(name = "DESCRICAO")
    private String descricao;
    @Column(name = "DATA_INICIO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataInicio;
    @Column(name = "DATA_STATUS_CONC")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataStatusConc;
    @Column(name = "VALOR")
    private BigDecimal valor;
    @Column(name = "VALOR_OBRIG_ESPC")
    private BigDecimal valorObrigEspc;
    @JoinColumn(name = "CR", referencedColumnName = "CR")
    @ManyToOne
    private Cr cr;

    public ParciaisEdesImobilizadas() {
    }

    public ParciaisEdesImobilizadas(BigDecimal id) {
        this.id = id;
    }

    public BigDecimal getId() {
        return id;
    }

    public void setId(BigDecimal id) {
        this.id = id;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public Date getDataInicio() {
        return dataInicio;
    }

    public void setDataInicio(Date dataInicio) {
        this.dataInicio = dataInicio;
    }

    public String getOdex() {
        return odex;
    }

    public void setOdex(String odex) {
        this.odex = odex;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Date getDataStatusConc() {
        return dataStatusConc;
    }

    public void setDataStatusConc(Date dataStatusConc) {
        this.dataStatusConc = dataStatusConc;
    }

    public BigDecimal getValor() {
        return valor;
    }

    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }

    public BigDecimal getValorObrigEspc() {
        return valorObrigEspc;
    }

    public void setValorObrigEspc(BigDecimal valorObrigEspc) {
        this.valorObrigEspc = valorObrigEspc;
    }

    public Cr getCr() {
        return cr;
    }

    public void setCr(Cr cr) {
        this.cr = cr;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.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 ParciaisEdesImobilizadas)) {
            return false;
        }
        ParciaisEdesImobilizadas other = (ParciaisEdesImobilizadas) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.celg.entidade.ParciaisEdesImobilizadas[ id=" + id + " ]";
    }
    
}

Você pode alterar a configuração do teu provider e habilitar a saída de sql.
Isso permitirá visualizar a query gerada e, então, entender o que o provider está gerando e como ele está fazendo isso.

Como eu quase não uso JPQL, precisei pesquisar um pouco.
Sei que, no SQL, você precisa colocar cada coluna que referencia no goup by na declaração do select.
Logo, penso que pode ser algo parecido.
Uma das respostas nessa thread diz o mesmo que eu pensei. Dá uma olhada.

Essa configuração seria aqui? Ainda sou bem iniciante no JPA, se puder detalhar mais um pouco eu agradeço.

<property name="eclipselink.logging.level" value="FINE"/>

Eu achei a configuração, obrigado.

Não, é no persistence.xml
Se está utilizando o hibernate como provider, poder inserir a propriedade abaixo

<property name = "hibernate.show_sql" value = "true" />

Se é EclipseLink, use essa

<property name="eclipselink.logging.level" value="FINE"/>

Se for (quase improvável) OpenJPA, essa:

<property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE"/>
1 curtida

Certo, eu consegui ver qual a Query que está sendo executada, porém eu gostaria de alterar…
O problema é que a Query que é utilizada não existe no meu código, então ela está sendo gerada pelo JPA?

Se sim, então eu tenho que alterar via código java certo?

Vamos por partes.
Primeiro, você entende qual o papel de um framework? Se entende, tem entendimento sobre como funciona um framework ORM, como o EclipseLink, que é o que está usando?

Basicamente um framework é uma estrutura complexa que visa executar tarefas que seriam repetitivas e pouco produtivas para um desenvolvedor.
No caso dos frameworks ORM, como o EclipseLink, as tarefas repetitivas se referem à criação de queries e conversão de objeto para esttrutura (por isso o framework se chama Object Relational Mapping - Mapeamento objeto relacional).
Como você não precisa ficar criando milhares de linhas de queries, ganha em produtividade e pode se concentrar em planejar adequadamente os teus objetos (que poderão refletir tabelas e tornar-se entidades) e na configuração disso.
Dentre as diversas facilidades que o JPA oferece, uma delas é a sintaxe simplificada de select, que torna a consulta algo como

SELECT f FROM Foo f;

Que, teoricamente, geraria uma query parecida com

SELECT f.id, f.nome, f.idade, f.xyz FROM tabela_mapeada_como_foo f;

Entendeu?

Agora sim, qual é a query gerada?

Exatamente, precisa alterar a tua named query para que se adeque ao que precisa.

É aqui que eu queria chegar, a query que é utilizada não está listada em NENHUMA namedquery…

A query gerada foi essa:

SELECT * FROM (SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum  FROM (SELECT ID AS a1, CD AS a2, DATA AS a3, DATA_INICIO AS a4, ODEX AS a5, ODI AS a6, VALOR_IMOB AS a7, VALOR_OBRIG AS a8, CR AS a9, ID_CLASS_TAXONOMIA AS a10 FROM EDES_IMOBILIZADAS) a WHERE ROWNUM <= ?) WHERE rnum > ?
	bind => [2 parameters bound]

Olha, eu posso dizer que é praticamente impossível uma query ser executada sem que nenhuma funcionalidade do teu sistema esteja originando uma chamada a ela.
Portanto, verifique se existe alguma classe mapeada em referência à tabela “META_BASE_ATIVOS”.

Eu consegui identificar de onde está vindo, porém não consigo alterar qual, desconsidere o último post.
Ele está buscando a NamedQuery(findAll), só que eu precisava que buscasse findByDataGroup e não estou conseguindo alterar isso.

Mas isso se resolve facilmente. Onde você chama a namedquery findAll, basta trocar pela findByDataGroup.

Vou postar as minhas classes aqui, não estou conseguindo achar onde está sendo feita a chamada da namedQuery.
ParciaisEdesImobilizadasFacade:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.celg.sessao;

import br.com.celg.entidade.ParciaisEdesImobilizadas;
import br.com.celg.sessao.interfaceFacade.ParciaisEdesImobilizadasFacadeLocal;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author paulo
 */
@Stateless
public class ParciaisEdesImobilizadasFacade extends AbstractFacade<ParciaisEdesImobilizadas> implements ParciaisEdesImobilizadasFacadeLocal {
    @PersistenceContext(unitName = "SGT-SGIPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public ParciaisEdesImobilizadasFacade() {
        super(ParciaisEdesImobilizadas.class);
    }
    
}

AbstractFacade:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.celg.sessao;

import java.util.List;
import javax.persistence.EntityManager;

/**
 *
 * @author paulo
 */
public abstract class AbstractFacade<T> {
    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    public void create(T entity) {
        getEntityManager().persist(entity);
    }

    public void edit(T entity) {
        getEntityManager().merge(entity);
    }

    public void remove(T entity) {
        getEntityManager().remove(getEntityManager().merge(entity));
    }

    public T find(Object id) {
        return getEntityManager().find(entityClass, id);
    }

    public List<T> findAll() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }

    public List<T> findRange(int[] range) {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        javax.persistence.Query q = getEntityManager().createQuery(cq);
        q.setMaxResults(range[1] - range[0]);
        q.setFirstResult(range[0]);
        return q.getResultList();
    }

    public int count() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
        cq.select(getEntityManager().getCriteriaBuilder().count(rt));
        javax.persistence.Query q = getEntityManager().createQuery(cq);
        return ((Long) q.getSingleResult()).intValue();
    }
    
    public List<String> findByDataGroup() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }
    
}

ParciaisEdesImobilizadasFacadeLocal :

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.celg.sessao.interfaceFacade;

import br.com.celg.entidade.ParciaisEdesImobilizadas;
import java.util.List;
import javax.ejb.Local;

/**
 *
 * @author paulo
 */
@Local
public interface ParciaisEdesImobilizadasFacadeLocal {

    void create(ParciaisEdesImobilizadas parciaisEdesImobilizadas);

    void edit(ParciaisEdesImobilizadas parciaisEdesImobilizadas);

    void remove(ParciaisEdesImobilizadas parciaisEdesImobilizadas);

    ParciaisEdesImobilizadas find(Object id);

    List<ParciaisEdesImobilizadas> findAll();

    List<ParciaisEdesImobilizadas> findRange(int[] range);

    List<String> findByDataGroup();
    
    int count();
    
}

Entidade:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.celg.entidade;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author paulo
 */
@Entity
@Table(name = "PARCIAIS_EDES_IMOBILIZADAS")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "ParciaisEdesImobilizadas.findAll", query = "SELECT p FROM ParciaisEdesImobilizadas p GROUP BY p.data"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findById", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.id = :id"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByData", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.data = :data"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByDataGroup", query = "SELECT p.data FROM ParciaisEdesImobilizadas p GROUP BY p.data"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByOdex", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.odex = :odex"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByDescricao", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.descricao = :descricao"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByDataInicio", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.dataInicio = :dataInicio"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByDataStatusConc", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.dataStatusConc = :dataStatusConc"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByValor", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.valor = :valor"),
    @NamedQuery(name = "ParciaisEdesImobilizadas.findByValorObrigEspc", query = "SELECT p FROM ParciaisEdesImobilizadas p WHERE p.valorObrigEspc = :valorObrigEspc")})
public class ParciaisEdesImobilizadas implements Serializable {
    private static final long serialVersionUID = 1L;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Id
    @Basic(optional = false)
    @Column(name = "ID")
    private BigDecimal id;
    @Column(name = "DATA")
    private String data;
    @Column(name = "ODEX")
    private String odex;
    @Column(name = "DESCRICAO")
    private String descricao;
    @Column(name = "DATA_INICIO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataInicio;
    @Column(name = "DATA_STATUS_CONC")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataStatusConc;
    @Column(name = "VALOR")
    private BigDecimal valor;
    @Column(name = "VALOR_OBRIG_ESPC")
    private BigDecimal valorObrigEspc;
    @JoinColumn(name = "CR", referencedColumnName = "CR")
    @ManyToOne
    private Cr cr;

    public ParciaisEdesImobilizadas() {
    }

    public ParciaisEdesImobilizadas(BigDecimal id) {
        this.id = id;
    }

    public BigDecimal getId() {
        return id;
    }

    public void setId(BigDecimal id) {
        this.id = id;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public Date getDataInicio() {
        return dataInicio;
    }

    public void setDataInicio(Date dataInicio) {
        this.dataInicio = dataInicio;
    }

    public String getOdex() {
        return odex;
    }

    public void setOdex(String odex) {
        this.odex = odex;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Date getDataStatusConc() {
        return dataStatusConc;
    }

    public void setDataStatusConc(Date dataStatusConc) {
        this.dataStatusConc = dataStatusConc;
    }

    public BigDecimal getValor() {
        return valor;
    }

    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }

    public BigDecimal getValorObrigEspc() {
        return valorObrigEspc;
    }

    public void setValorObrigEspc(BigDecimal valorObrigEspc) {
        this.valorObrigEspc = valorObrigEspc;
    }

    public Cr getCr() {
        return cr;
    }

    public void setCr(Cr cr) {
        this.cr = cr;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.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 ParciaisEdesImobilizadas)) {
            return false;
        }
        ParciaisEdesImobilizadas other = (ParciaisEdesImobilizadas) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.celg.entidade.ParciaisEdesImobilizadas[ id=" + id + " ]";
    }
    
}

Controller:

package br.com.celg.controlado;

import br.com.celg.entidade.ParciaisEdesImobilizadas;
import br.com.celg.controlado.util.AbstractController;
import br.com.celg.controlado.util.JsfUtil;
import br.com.celg.controlado.util.PaginationHelper;
import br.com.celg.sessao.interfaceFacade.ParciaisEdesImobilizadasFacadeLocal;

import java.util.ArrayList;
import java.util.List;
import java.io.Serializable;
import java.io.ByteArrayOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.ResourceBundle;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;

@ManagedBean(name = "parciaisEdesImobilizadasController")
@ViewScoped
public class ParciaisEdesImobilizadasController extends AbstractController implements Serializable {

    private ParciaisEdesImobilizadas current;
    @EJB
    private br.com.celg.sessao.interfaceFacade.ParciaisEdesImobilizadasFacadeLocal ejbFacade;

    @Override
    public SelectItem[] getSelectItemsConsulta() {
        SelectItem[] itemsLocal = new SelectItem[1];
        //itemsLocal[0] = new SelectItem("id", ResourceBundle.getBundle("/Bundle").getString("CreateParciaisEdesImobilizadasTitle_id"));
        //itemsLocal[0] = new SelectItem("data", ResourceBundle.getBundle("/Bundle").getString("CreateParciaisEdesImobilizadasTitle_data"));
        itemsLocal[0] = new SelectItem("odex", ResourceBundle.getBundle("/Bundle").getString("CreateParciaisEdesImobilizadasTitle_odex"));
        //itemsLocal[3] = new SelectItem("descricao", ResourceBundle.getBundle("/Bundle").getString("CreateParciaisEdesImobilizadasTitle_descricao"));
        //itemsLocal[4] = new SelectItem("dataStatusConc", ResourceBundle.getBundle("/Bundle").getString("CreateParciaisEdesImobilizadasTitle_dataStatusConc"));
        //itemsLocal[5] = new SelectItem("valor", ResourceBundle.getBundle("/Bundle").getString("CreateParciaisEdesImobilizadasTitle_valor"));
        //itemsLocal[6] = new SelectItem("valorObrigEspc", ResourceBundle.getBundle("/Bundle").getString("CreateParciaisEdesImobilizadasTitle_valorObrigEspc"));
        //itemsLocal[1] = new SelectItem("cr", ResourceBundle.getBundle("/Bundle").getString("CreateParciaisEdesImobilizadasTitle_cr"));
        return itemsLocal;
    }

    public ParciaisEdesImobilizadasController() {
    }

//    private List<ParciaisEdesImobilizadas> listaParciaisEdes;
//
//    public List<ParciaisEdesImobilizadas> getListaParciaisEdes() {
//        return listaParciaisEdes;
//    }
//
//    public void setListaParciaisEdes(List<ParciaisEdesImobilizadas> listaParciaisEdes) {
//        this.listaParciaisEdes = listaParciaisEdes;
//    }
//    
//    @PostConstruct
//    public void inicializarLista() {
//        listaParciaisEdes = ejbFacade.findAll();
//    }
    
    
    
    private List<String> listaDatas;

    public List<String> getListaDatas() {
        return listaDatas;
    }

    public void setListaDatas(List<String> listaDatas) {
        this.listaDatas = listaDatas;
    }

    @PostConstruct
    public void inicializarListaData() {
        listaDatas = ejbFacade.findByDataGroup();
    }
    
    public ParciaisEdesImobilizadas getSelected() {
        if (current == null) {
            current = new ParciaisEdesImobilizadas();
            selectedItemIndex = -1;
        }
        return current;
    }

    public void setSelected(ParciaisEdesImobilizadas entidade) {
        this.current = entidade;
    }

    private ParciaisEdesImobilizadasFacadeLocal getFacade() {
        return ejbFacade;
    }

    public PaginationHelper getPagination() {
        if (pagination == null) {
            pagination = new PaginationHelper(10) {
                @Override
                public int getItemsCount() throws Exception {
                    //return getFacade().count(getConsultarPor(), getParametroConsulta());
                    return getFacade().count();
                }

                @Override
                public DataModel createPageDataModel() throws Exception {
                    return new ListDataModel(getFacade().findRange(new int[]{getPageFirstItem(), getPageFirstItem() + getPageSize()}));
                    //return new ListDataModel(getFacade().findRange(new int[]{getPageFirstItem(), getPageFirstItem() + getPageSize()}, getConsultarPor(), getParametroConsulta()));
                }
            };
        }
        return pagination;
    }

    public String prepareView() {
        current = (ParciaisEdesImobilizadas) getItems().getRowData();
        selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
        return "View";
    }

    public String prepareCreate() {
        current = new ParciaisEdesImobilizadas();
        selectedItemIndex = -1;
        return "Create";
    }

    public String create() {
        try {
            getFacade().create(current);
            JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("ParciaisEdesImobilizadasCreated"));
            return prepareCreate();
        } catch (Exception e) {
            JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
            return null;
        }
    }

    public String prepareEdit() {
        current = (ParciaisEdesImobilizadas) getItems().getRowData();
        selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
        return "Edit";
    }

    public String update() {
        try {
            getFacade().edit(current);
            JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("ParciaisEdesImobilizadasUpdated"));
            return "List";
        } catch (Exception e) {
            JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
            return null;
        }
    }

    public String destroy() {
        current = (ParciaisEdesImobilizadas) getItems().getRowData();
        selectedItemIndex = pagination.getPageFirstItem() + getItems().getRowIndex();
        performDestroy();
        recreateModel();
        return "List";
    }

    public String destroyAndView() {
        performDestroy();
        recreateModel();
        updateCurrentItem();
        if (selectedItemIndex >= 0) {
            return "View";
        } else {
            // all items were removed - go back to list
            recreateModel();
            return "List";
        }
    }

    private void performDestroy() {
        try {
            getFacade().remove(current);
            JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("ParciaisEdesImobilizadasDeleted"));
        } catch (Exception e) {
            JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
        }
    }

    private void updateCurrentItem() {
        int count = getFacade().count();
        if (selectedItemIndex >= count) {
            // selected index cannot be bigger than number of items:
            selectedItemIndex = count - 1;
            // go to previous page if last page disappeared:
            if (pagination.getPageFirstItem() >= count) {
                pagination.previousPage();
            }
        }
        if (selectedItemIndex >= 0) {
            current = getFacade().findRange(new int[]{selectedItemIndex, selectedItemIndex + 1}).get(0);
        }
    }

    @Override
    public void consultar() {
        try {
            //getPagination().getItemsCount();
            items = getPagination().createPageDataModel();
        } catch (Exception ex) {
            JsfUtil.addErrorMessage(ex, ResourceBundle.getBundle("/Bundle").getString("OcorreuErro"));
        }
    }

    public void next() {
        try {
            getPagination().nextPage();
            items = getPagination().createPageDataModel();
        } catch (Exception ex) {
            JsfUtil.addErrorMessage(ex, ResourceBundle.getBundle("/Bundle").getString("OcorreuErro"));
        }
    }

    public void previous() {
        try {
            getPagination().previousPage();
            items = getPagination().createPageDataModel();
        } catch (Exception ex) {
            JsfUtil.addErrorMessage(ex, ResourceBundle.getBundle("/Bundle").getString("OcorreuErro"));
        }

    }

    public void inicio() {
        try {
            getPagination().startPage();
            items = getPagination().createPageDataModel();
        } catch (Exception ex) {
            JsfUtil.addErrorMessage(ex, ResourceBundle.getBundle("/Bundle").getString("OcorreuErro"));
        }

    }

    public void fim() {
        try {
            getPagination().endPage();
            items = getPagination().createPageDataModel();
        } catch (Exception ex) {
            JsfUtil.addErrorMessage(ex, ResourceBundle.getBundle("/Bundle").getString("OcorreuErro"));
        }

    }

    public SelectItem[] getItemsAvailableSelectMany() {
        return JsfUtil.getSelectItems(ejbFacade.findAll(), false);
    }

    public SelectItem[] getItemsAvailableSelectOne() {
        return JsfUtil.getSelectItems(ejbFacade.findAll(), true);
    }

    public List<ParciaisEdesImobilizadas> complete(String query) {
        List<ParciaisEdesImobilizadas> results = new ArrayList<ParciaisEdesImobilizadas>();
        return results;
    }

    public void gerarRelatorio() {
        try {


            ByteArrayOutputStream baos = null;
            //JsfUtil.relatorio(null, null, new int[]{3, 10, 6, 6, 3, 3, 3, 4}, null, null);

            HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
            response.setHeader("Expires", "0");
            response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
            response.setHeader("Pragma", "public");
            response.setContentType("application/pdf");
//            response.setContentType("application/force-download");
            response.setContentLength(baos.size());
            OutputStream os = response.getOutputStream();
            baos.writeTo(os);
            os.flush();
            os.close();

        } catch (Exception ex) {
            JsfUtil.addErrorMessage(ex, ResourceBundle.getBundle("/Bundle").getString("OcorreuErro"));
        }
    }

    @FacesConverter(forClass = ParciaisEdesImobilizadas.class)
    public static class ParciaisEdesImobilizadasControllerConverter implements Converter {

        public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
            if (value == null || value.length() == 0 || value.equals("null")) {
                return null;
            }
            ParciaisEdesImobilizadasController controller = (ParciaisEdesImobilizadasController) facesContext.getApplication().getELResolver().
                    getValue(facesContext.getELContext(), null, "parciaisEdesImobilizadasController");
            return controller.ejbFacade.find(getKey(value));
        }

        java.math.BigDecimal getKey(String value) {
            java.math.BigDecimal key;
            key = new java.math.BigDecimal(value);
            return key;
        }

        String getStringKey(java.math.BigDecimal value) {
            StringBuffer sb = new StringBuffer();
            sb.append(value);
            return sb.toString();
        }

        public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
            if (object == null) {
                return null;
            }
            if (object instanceof ParciaisEdesImobilizadas) {
                ParciaisEdesImobilizadas o = (ParciaisEdesImobilizadas) object;
                return getStringKey(o.getId());
            } else {
                throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + ParciaisEdesImobilizadasController.class.getName());
            }
        }
    }

    @FacesConverter(value = "ParciaisEdesImobilizadasConverter")
    public static class ParciaisEdesImobilizadasController2Converter implements Converter {

        public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
            if (value == null || value.length() == 0 || value.equals("null")) {
                return null;
            }
            ParciaisEdesImobilizadasController controller = (ParciaisEdesImobilizadasController) facesContext.getApplication().getELResolver().
                    getValue(facesContext.getELContext(), null, "parciaisEdesImobilizadasController");
            return controller.ejbFacade.find(getKey(value));
        }

        java.math.BigDecimal getKey(String value) {
            java.math.BigDecimal key;
            key = new java.math.BigDecimal(value);
            return key;
        }

        String getStringKey(java.math.BigDecimal value) {
            StringBuffer sb = new StringBuffer();
            sb.append(value);
            return sb.toString();
        }

        public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
            if (object == null) {
                return null;
            }
            if (object instanceof ParciaisEdesImobilizadas) {
                ParciaisEdesImobilizadas o = (ParciaisEdesImobilizadas) object;
                return getStringKey(o.getId());
            } else {
                throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + ParciaisEdesImobilizadasController.class.getName());
            }
        }
    }
}

Encontrei na classe ParciaisEdesImobilizadasController nos métodos getItemsAvailableSelectOne e getItemsAvailableSelectMany,

Mas ai está chamando o método findAll do abstract, não a namedQuery…

Ele está chamando este método:

public List<T> findAll() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }

E eu gostaria que chamasse esse:

public List<String> findByDataGroup() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }

Como eu fiz no Controller:

@PostConstruct
    public void inicializarListaData() {
        listaDatas = ejbFacade.findByDataGroup();
    }

Só que esse inicializarListaData() está retornando a namedQuery findAll e não a findByDataGroup

Preciso entender: você criou este código ou é um ctrl + C/ctrl + V?
O que está ocorrendo é que o EclipseLink constrói a query com base na named query que você definiu.

Estou desenvolvendo um sistema novo na empresa e existe um padrão a ser seguido, tudo isso foi gerado automaticamente por um gerador de código feito pela empresa, como eu nunca havia trabalhado com JPA dessa forma, estou apanhando bastante para entender algumas coisas.

Eu acho que o problema está no entityClass que eu estou passando no cq.from(…), mas eu não sei o que realmente deveria passar ali.

Então converse com quem tem mais experiência no gerador de códigos ou em quem já teve esse tipo de problema aí na empresa.
Até por quê, toda sugestão poderá fazer com que o “padrão a ser seguido” seja quebrado.

Mesmo que não seja usado esse o padrão, eu gostaria de aprender a como solucionar isso, para crescimento pessoal, até porque se fosse apenas pelo sistema da empresa, eu não deveria estar utilizando o forúm para isso.

Pode me tirar somente mais essa dúvida? Após isso dou o tópico como solucionado.