Metodo Autenticacao -Erro no metodo com critéria não busca so retorna null

O método da classe DAO so retorna null, verifiquei se os dados inseridos estão corretos (CPF e SENHA) e estão, tentei buscar com @NamedQuery e tambem no unique result o valor da busca passa a ser NULL, o que pode ser?

Classe DAO

`    public Funcionario autenticar(String cpf, String senha) {
        Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
        
        try {
            Funcionario funcionario=null;
            Criteria consulta = sessao.createCriteria(Funcionario.class);
            consulta.createAlias("pessoa", "p");
            
            consulta.add(Restrictions.eq("p.cpf", cpf));
            System.out.println(cpf);
            
            SimpleHash hash = new SimpleHash("md5", senha);  // Vem com valor 1234 
            
            consulta.add(Restrictions.eq("senha", hash.toHex()));   //  valor com valor  criptografado
                
            funcionario = (Funcionario) consulta.uniqueResult();      //Vem com valor NULLl
            return funcionario;
        } catch (RuntimeException erro) {
            throw erro;
        } finally {
            sessao.close();
        }
    }   `

XHTML
` </h:panelGrid>

                    <h:panelGrid border="0" columns="2" cellpadding="4" cellspacing="6">
                        <p:outputLabel value="CPF:" />
                        <p:inputMask size="14" mask="999.999.999-99"
                            value="#{autenticacaoBean.funcionario.pessoa.cpf}">
                            <f:validateBean />
                        </p:inputMask>

                        <p:outputLabel for="senha" value="Senha:" />
                        <p:password id="senha" maxlength="8" size="14"
                            value="#{autenticacaoBean.funcionario.senha}">
                            <f:validateBean />
                        </p:password>
                    </h:panelGrid>`

BEAN

`    @Entity
@Table(name="funcionario")
        @NamedQuery(name="Funcionario.autenticar",query="SELECT funcionario FROM Funcionario funcionario WHERE funcionario.pessoa.cpf = :cpf AND funcionario.senha=:senha")
})
public class Funcionario extends GenericDomain {
    
    private static final long serialVersionUID = 1L;
   ....
    
    @OneToOne
    @JoinColumn(nullable = false)
    private Pessoa pessoa;`

Antes de dar algum palpite sobre a solução, aparece algum erro no console?

1 curtida

PESSOA DOMAIN

@Entity
@Table(name = "pessoa")
public class Pessoa extends GenericDomain {

private static final long serialVersionUID = 1L;

@Column(name = "nome", length = 60, nullable = false)
private String nome;

@CPF(message = "O CPF informado não é válido!")
@Column(name = "cpf", length = 14, nullable = false)
private String cpf;

@Column(name = "numero_rg", length = 15)
private String numeroRG;

@Column(name = "orgao_emissor", length = 6)
private String orgaoEmissor;

@ManyToOne
@JoinColumn(nullable = false)
private Sexo sexo;

@Email(message = "O email digitado não é válido!")
@Column(name="email", length = 100, nullable = false)
private String email;

@Column(name = "data_emissao_rg")
@Temporal(TemporalType.DATE)
private Date dataEmissaoRG;

@Column(name = "data_nascimento", nullable = false)
@Temporal(TemporalType.DATE)
private Date dataNascimento;

@ManyToOne
@JoinColumn(nullable = false)
private Endereco endereco;`

FUNCIONARIO DOMAIN

public class Funcionario extends GenericDomain {

private static final long serialVersionUID = 1L;

@Column(name="carteira_trabalho", length = 15, nullable = false)
private String carteiraTrabalho;

@Temporal(TemporalType.TIMESTAMP)
@Column(name="data_admissao", nullable = false)
private Date dataAdmissao;

@Temporal(TemporalType.DATE)
@Column(name="data_saida", nullable = true)
private Date dataSaida;

@Column(name = "senha", length = 32, nullable = false)
private String senha;

@Column(name = "tipo", nullable = false)
private char tipo;

@Column(name = "situacao", nullable = false)
private Boolean situacao;

@OneToOne
@JoinColumn(nullable = false)
private Pessoa pessoa;`

@Logusmao, não aparece erro algum, simplesmente a consulta vem NULL mesmo existindo o registro no banco.

Geralmente o que eu faço é logar as queries para ver o que está ocorrendo por trás dos panos.

hibernate.cfg.xml

<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>
1 curtida

@romero.dias blz!? ja tenho 2 destas propriedades definidas exceto a ultima.
<property name="use_sql_comments">true</property>


Hibernate:
select
this_.codigo as codigo1_13_3_,
this_.carteira_trabalho as carteira2_13_3_,
this_.data_admissao as data_adm3_13_3_,
this_.data_saida as data_sai4_13_3_,
this_.pessoa_codigo as pessoa_c8_13_3_,
this_.senha as senha5_13_3_,
this_.situacao as situacao6_13_3_,
this_.tipo as tipo7_13_3_,
p1_.codigo as codigo1_19_0_,
p1_.cpf as cpf2_19_0_,
p1_.data_emissao_rg as data_emi3_19_0_,
p1_.data_nascimento as data_nas4_19_0_,
p1_.email as email5_19_0_,
p1_.endereco_codigo as endereco9_19_0_,
p1_.nome as nome6_19_0_,
p1_.numero_rg as numero_r7_19_0_,
p1_.orgao_emissor as orgao_em8_19_0_,
p1_.sexo_codigo as sexo_co10_19_0_,
endereco4_.codigo as codigo1_7_1_,
endereco4_.bairro as bairro2_7_1_,
endereco4_.cep as cep3_7_1_,
endereco4_.cidade_codigo as cidade_c7_7_1_,
endereco4_.complemento as compleme4_7_1_,
endereco4_.numero as numero5_7_1_,
endereco4_.rua as rua6_7_1_,
sexo5_.codigo as codigo1_23_2_,
sexo5_.sigla as sigla2_23_2_
from
funcionario this_
inner join
pessoa p1_
on this_.pessoa_codigo=p1_.codigo
left outer join
endereco endereco4_
on p1_.endereco_codigo=endereco4_.codigo
left outer join
sexo sexo5_
on p1_.sexo_codigo=sexo5_.codigo
where
p1_.cpf=?
and this_.senha=?

Resultado no Console.

CPF inserido no Bean... XXX.XXX.XXX-XX //correto
Senha inserida no Bean....admin //correto
Senha modificada no Bean ....: 21232f297a57a5a743894a0e4a801fc3 // correto
return funcionario da classe DAO...........:null

Pessoal, agradeço a tentativa de ajuda de vcs, eu infelizmente não descobri o porque do erro mas fui obrigado a apagar as tabelas de ‘funcionario’ e ‘pessoa’, inseri os valores da mesma forma (na mão) e funcionou, estranho neh!? tbm acho vlw…