Query dinâmica Hibernate retornando QueryException

Bom, estou enfrentando um problema com uma namedQuery que fiz, toda vez que faço uma pesquisa no campo de texto retorna QueryException.

A Stacktrace completa:

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
	at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
	at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at javafx.event.Event.fireEvent(Event.java:198)
	at javafx.scene.Scene$KeyHandler.process(Scene.java:3964)
	at javafx.scene.Scene$KeyHandler.access$1800(Scene.java:3910)
	at javafx.scene.Scene.impl_processKeyEvent(Scene.java:2040)
	at javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2501)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:217)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:149)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$353(GlassViewEventHandler.java:248)
	at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:247)
	at com.sun.glass.ui.View.handleKeyEvent(View.java:546)
	at com.sun.glass.ui.View.notifyKey(View.java:966)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
	at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
	at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
	... 31 more
Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: could not instantiate class [com.devgbr.model.entity.Paciente] from tuple
	at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1750)
	at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
	at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:458)
	at com.devgbr.model.dao.PacienteDAO.getByName(PacienteDAO.java:48)
	at com.devgbr.controller.Frm4PacientesController.handlePesquisar(Frm4PacientesController.java:170)
	... 41 more
Caused by: org.hibernate.QueryException: could not instantiate class [com.devgbr.model.entity.Paciente] from tuple
	at org.hibernate.transform.AliasToBeanConstructorResultTransformer.transformTuple(AliasToBeanConstructorResultTransformer.java:58)
	at org.hibernate.hql.internal.HolderInstantiator.instantiate(HolderInstantiator.java:95)
	at org.hibernate.loader.hql.QueryLoader.getResultList(QueryLoader.java:464)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2367)
	at org.hibernate.loader.Loader.list(Loader.java:2362)
	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:496)
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387)
	at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:229)
	at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1260)
	at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)
	at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573)
	at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449)
	... 43 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.hibernate.transform.AliasToBeanConstructorResultTransformer.transformTuple(AliasToBeanConstructorResultTransformer.java:55)
	... 54 more
Caused by: java.lang.NullPointerException
	at com.devgbr.model.entity.Paciente.<init>(Paciente.java:179)
	... 59 more

Minha classe:

package com.devgbr.model.entity;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author GbrDEV
 */
@Entity
@Table(name = "tbpaciente")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Paciente.findAll", query = "SELECT p FROM Paciente p")
    , @NamedQuery(name = "Paciente.findById", query = "SELECT p FROM Paciente p WHERE p.id = :id")
    , @NamedQuery(name = "Paciente.findByNomecivil", query = "SELECT p FROM Paciente p WHERE p.nomecivil = :nomecivil")
    , @NamedQuery(name = "Paciente.findByNome", query = "SELECT new com.devgbr.model.entity.Paciente(p.id, p.cns, p.nomecivil, p.nomesocial, p.sexo, p.raca, p.datanasc, p.cpf, p.rg, p.orgemissor, p.email, p.telefone, p.celular, p.mae, p.pai, c.nome, pl.nome, p.matricula, p.validade, p.indeterminado, a.nome, p.observacoes) "
            + "FROM "
            + "Paciente p "
            + "LEFT OUTER JOIN p.convenio c "
            + "LEFT OUTER JOIN p.plano pl "
            + "LEFT OUTER JOIN p.acomodacao a "
            + "WHERE p.nomecivil LIKE :paciente")
    , @NamedQuery(name = "Paciente.findByNomesocial", query = "SELECT p FROM Paciente p WHERE p.nomesocial = :nomesocial")
    , @NamedQuery(name = "Paciente.findByCns", query = "SELECT p FROM Paciente p WHERE p.cns = :cns")
    , @NamedQuery(name = "Paciente.findBySexo", query = "SELECT p FROM Paciente p WHERE p.sexo = :sexo")
    , @NamedQuery(name = "Paciente.findByRaca", query = "SELECT p FROM Paciente p WHERE p.raca = :raca")
    , @NamedQuery(name = "Paciente.findByDatanasc", query = "SELECT p FROM Paciente p WHERE p.datanasc = :datanasc")
    , @NamedQuery(name = "Paciente.findByCpf", query = "SELECT p FROM Paciente p WHERE p.cpf = :cpf")
    , @NamedQuery(name = "Paciente.findByRg", query = "SELECT p FROM Paciente p WHERE p.rg = :rg")
    , @NamedQuery(name = "Paciente.findByOrgemissor", query = "SELECT p FROM Paciente p WHERE p.orgemissor = :orgemissor")
    , @NamedQuery(name = "Paciente.findByEmail", query = "SELECT p FROM Paciente p WHERE p.email = :email")
    , @NamedQuery(name = "Paciente.findByTelefone", query = "SELECT p FROM Paciente p WHERE p.telefone = :telefone")
    , @NamedQuery(name = "Paciente.findByCelular", query = "SELECT p FROM Paciente p WHERE p.celular = :celular")
    , @NamedQuery(name = "Paciente.findByMae", query = "SELECT p FROM Paciente p WHERE p.mae = :mae")
    , @NamedQuery(name = "Paciente.findByPai", query = "SELECT p FROM Paciente p WHERE p.pai = :pai")
    , @NamedQuery(name = "Paciente.findByMatricula", query = "SELECT p FROM Paciente p WHERE p.matricula = :matricula")
    , @NamedQuery(name = "Paciente.findByValidade", query = "SELECT p FROM Paciente p WHERE p.validade = :validade")
    , @NamedQuery(name = "Paciente.findByIndeterminado", query = "SELECT p FROM Paciente p WHERE p.indeterminado = :indeterminado")})
public class Paciente implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @Column(name = "nomecivil")
    private String nomecivil;
    @Column(name = "nomesocial")
    private String nomesocial;
    @Column(name = "cns")
    private String cns;
    @Column(name = "sexo")
    private String sexo;
    @Column(name = "raca")
    private String raca;
    @Column(name = "datanasc")
    @Temporal(TemporalType.DATE)
    private Date datanasc;
    @Basic(optional = false)
    @Column(name = "cpf")
    private String cpf;
    @Column(name = "rg")
    private String rg;
    @Column(name = "orgemissor")
    private String orgemissor;
    @Column(name = "email")
    private String email;
    @Column(name = "telefone")
    private String telefone;
    @Column(name = "celular")
    private String celular;
    @Basic(optional = false)
    @Column(name = "mae")
    private String mae;
    @Column(name = "pai")
    private String pai;
    @Column(name = "matricula")
    private String matricula;
    @Column(name = "validade")
    @Temporal(TemporalType.DATE)
    private Date validade;
    @Column(name = "indeterminado")
    private Boolean indeterminado;
    @Lob
    @Column(name = "observacoes")
    private String observacoes;
    @JoinTable(name = "paciresp", joinColumns = {
        @JoinColumn(name = "paciente", referencedColumnName = "id")}, inverseJoinColumns = {
        @JoinColumn(name = "responsavel", referencedColumnName = "id")})
    @ManyToMany(fetch = FetchType.LAZY)
    private List<Responsavel> responsavelList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "paciente", fetch = FetchType.LAZY)
    private List<Atendimento> atendimentoList;
    @JoinColumn(name = "acomodacao", referencedColumnName = "id")
    @ManyToOne(fetch = FetchType.LAZY)
    private Acomodacao acomodacao;
    @JoinColumn(name = "convenio", referencedColumnName = "id")
    @ManyToOne(fetch = FetchType.LAZY)
    private Convenio convenio;
    @JoinColumn(name = "plano", referencedColumnName = "id")
    @ManyToOne(fetch = FetchType.LAZY)
    private Plano plano;

    public Paciente() {
    }

    public Paciente(Integer id, String cns, String nomecivil, String nomesocial, String sexo, String raca, Date datanasc, String cpf, String rg, String orgemissor, String email, String telefone, String celular, String mae, String pai, Convenio convenio, Plano plano, String matricula, Date validade, Boolean indeterminado, Acomodacao acomodacao, String observacoes) {
        this.id = id;
        this.nomecivil = nomecivil;
        this.nomesocial = nomesocial;
        this.cns = cns;
        this.sexo = sexo;
        this.raca = raca;
        this.datanasc = datanasc;
        this.cpf = cpf;
        this.rg = rg;
        this.orgemissor = orgemissor;
        this.email = email;
        this.telefone = telefone;
        this.celular = celular;
        this.mae = mae;
        this.pai = pai;
        this.convenio = convenio;
        this.plano = plano;
        this.matricula = matricula;
        this.validade = validade;
        this.indeterminado = indeterminado;
        this.acomodacao = acomodacao;
        this.observacoes = observacoes;
    }

    public Paciente(Integer id, String cns, String nomecivil, String nomesocial, String sexo, String raca, Date datanasc, String cpf, String rg, String orgemissor, String email, String telefone, String celular, String mae, String pai, String convenio, String plano, String matricula, Date validade, Boolean indeterminado, String acomodacao, String observacoes) {
        this.id = id;
        this.nomecivil = nomecivil;
        this.nomesocial = nomesocial;
        this.cns = cns;
        this.sexo = sexo;
        this.raca = raca;
        this.datanasc = datanasc;
        this.cpf = cpf;
        this.rg = rg;
        this.orgemissor = orgemissor;
        this.email = email;
        this.telefone = telefone;
        this.celular = celular;
        this.mae = mae;
        this.pai = pai;
        if (convenio != null) {
            this.convenio.setNome(convenio);
        }
        if (plano != null) {
            this.plano.setNome(plano);
        }
        this.matricula = matricula;
        this.validade = validade;
        this.indeterminado = indeterminado;
        if (acomodacao != null) {
            this.acomodacao.setNome(acomodacao);
        }
        this.observacoes = observacoes;
    }

    public Paciente(Integer id) {
        this.id = id;
    }

    public Paciente(Integer id, String nomecivil, String cpf, String mae) {
        this.id = id;
        this.nomecivil = nomecivil;
        this.cpf = cpf;
        this.mae = mae;
    }

    public Integer getId() {
        return id;
    }

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

    public String getNomecivil() {
        return nomecivil;
    }

    public void setNomecivil(String nomecivil) {
        this.nomecivil = nomecivil;
    }

    public String getNomesocial() {
        return nomesocial;
    }

    public void setNomesocial(String nomesocial) {
        this.nomesocial = nomesocial;
    }

    public String getCns() {
        return cns;
    }

    public void setCns(String cns) {
        this.cns = cns;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public String getRaca() {
        return raca;
    }

    public void setRaca(String raca) {
        this.raca = raca;
    }

    public Date getDatanasc() {
        return datanasc;
    }

    public void setDatanasc(Date datanasc) {
        this.datanasc = datanasc;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getRg() {
        return rg;
    }

    public void setRg(String rg) {
        this.rg = rg;
    }

    public String getOrgemissor() {
        return orgemissor;
    }

    public void setOrgemissor(String orgemissor) {
        this.orgemissor = orgemissor;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }

    public String getMae() {
        return mae;
    }

    public void setMae(String mae) {
        this.mae = mae;
    }

    public String getPai() {
        return pai;
    }

    public void setPai(String pai) {
        this.pai = pai;
    }

    public String getMatricula() {
        return matricula;
    }

    public void setMatricula(String matricula) {
        this.matricula = matricula;
    }

    public Date getValidade() {
        return validade;
    }

    public void setValidade(Date validade) {
        this.validade = validade;
    }

    public Boolean getIndeterminado() {
        return indeterminado;
    }

    public void setIndeterminado(Boolean indeterminado) {
        this.indeterminado = indeterminado;
    }

    public String getObservacoes() {
        return observacoes;
    }

    public void setObservacoes(String observacoes) {
        this.observacoes = observacoes;
    }

    @XmlTransient
    public List<Responsavel> getResponsavelList() {
        return responsavelList;
    }

    public void setResponsavelList(List<Responsavel> responsavelList) {
        this.responsavelList = responsavelList;
    }

    @XmlTransient
    public List<Atendimento> getAtendimentoList() {
        return atendimentoList;
    }

    public void setAtendimentoList(List<Atendimento> atendimentoList) {
        this.atendimentoList = atendimentoList;
    }

    public Acomodacao getAcomodacao() {
        return acomodacao;
    }

    public void setAcomodacao(Acomodacao acomodacao) {
        this.acomodacao = acomodacao;
    }

    public Convenio getConvenio() {
        return convenio;
    }

    public void setConvenio(Convenio convenio) {
        this.convenio = convenio;
    }

    public Plano getPlano() {
        return plano;
    }

    public void setPlano(Plano plano) {
        this.plano = plano;
    }

    @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 Paciente)) {
            return false;
        }
        Paciente other = (Paciente) 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 "com.devgbr.model.entity.Paciente[ id=" + id + " ]";
    }

}

Meu método de pesquisa:

public List<Paciente> getByName(String nome) {
        List<Paciente> paciente = em.createNamedQuery("Paciente.findByNome", Paciente.class)
                .setParameter("paciente", "%" + nome + "%")
                .getResultList();
        return paciente;
    }

Qualquer informação a mais que seja necessária é só falar.
Obrigado pela atenção!

Reparou nesta linha?

SIm e está tudo normal, inclusive, acho estranho dar null nessa linha pois a linha citada é essa:

e a matricula, no caso, é uma String. Objetos podem ser setados como nulos, correto? Logo não entendo o NPE referenciando essa linha.

o que é isso? Um atributo paciente na classe paciente???

O construtor na classe Paciente esta igual ao que você esta esperando no select?

new com.devgbr.model.entity.Paciente(p.id, p.cns, p.nomecivil, p.nomesocial, p.sexo, p.raca, p.datanasc, p.cpf, p.rg, p.orgemissor, p.email, p.telefone, p.celular, p.mae, p.pai, c.nome, pl.nome, p.matricula, p.validade, p.indeterminado, a.nome, p.observacoes) "

Não, é a especificação do parametro de pesquisa da HQL como está lá na namedQuery.

Sim, inclusive fiz dois construtores pra não ter problemas.

tem como colocar a class Paciente aqui.

Eu deixei a classe na pergunta.

Eu acho que o problema é que o hibernate não esta conseguindo instanciar sua classe, mas não sei porque pois não uso hibernate.

Ola,

Alguns nomes no sql esta diferente do construtor.
Ex;

String convenio, String plano,
         c.nome,      pl.nome,

Veja que pelo erro do hibernate ele usa a class AliasToBeanConstructorResultTransformer, onde ele vai usar o nome dos attributos no sql para converter no construtor.

voce pode fazer duas coisas:
alterar os nomes no construtor conforme o sql ou colocar um alias pros campos no sql, onde:

c.nome as convenio,      pl.nome as ,

Certo, vou fazer o teste e retorno.

De certeza que não estás a usar uma versão compilada da class diferente do teu código? Na tua versão compilada essa linha dá NullPointerException…

Isso não funcionou, percebi que na named quer não está reconhecendo o construtor da classe.

Cara, mas o funcionamento do hibernate não segue a lógica de ter um construtor padrão (ou nenhum construtor) e injetar os valores nos atributos via setters?

Nesse caso em especifico eu relaciono essa classe com outras três, logo eu não consigo instanciar 4 classes diferentes em uma. A minha named query não consegue fazer isso, então, preciso chamar o construtor da classe na NamedQuery, fiz isso para o login e funciona, só que não estou conseguindo agora, já estou a alguns dias pesquisando sobre e até agora nada.

Provavelmente o problema está aí.
Você precisa criar uma única classe que represente todos os dados (colunas) que estão nessa view e que pretende usar.
Provavelmente precise de sub selects ou precise fazer outros selects para obter os dados que não estão diretamente ligados à entidade principal.

Errado,

O problema esta no construtor da class.

quando se faz select new construtor() o hibernate vai fazer um parse via alias ou seja,
se no construtor tiver String joao no select vai ter que ser select new construtor(campo as joao).

veja que no erro mostra:

Caused by: org.hibernate.QueryException: could not instantiate class [com.devgbr.model.entity.Paciente] from tuple
	at org.hibernate.transform.AliasToBeanConstructorResultTransformer.transformTuple(AliasToBeanConstructorResultTransformer.java:58)

mais em destaque para isso org.hibernate.transform.AliasToBeanConstructorResultTransformer.

Na hora da transformacao ele nao encontrou o alias como mostrei aqui.