Será que não carrega pq o email esta vindo da view e não de um objeto persistido? Ainda não encontrei uma explicação para isso e aparentemente a Criteria está certa, estou usando a mesma em outra pesquisa, só que com dados enviados pelo form.
Abraço!
Não descobri o motivo de não carregar todos os atributos do objeto para o Controller, então mudei de estratégia e resolvi, ao invés de carregar pro Controller o objeto contato, trabalhei com ele na própria DAO.
No Controller verifico se o contato já existe através do seu email:
Se ele existir cai no método de adicionar mensagem, senão adiciona o novo contato no banco com a sua mensagem.
No DAO gravo uma nova mensagem do contato desta forma:
public void adicionaMensagem(Contato contato, Mensagem mensagem) {
Contato c = this.carregaContato(contato);
Transaction tx = session.beginTransaction();
mensagem.setContato(c);
session.save(mensagem);
session.merge(c);
tx.commit();
}
Olha lá o método carregaContato() que não estava carregando a id do contato pro Controller lá! Funcionou dentro da DAO, mas pra mandar o objeto pro Controller ele não manda a id do contato. ¬¬
Agora sim, tenho um contato com várias mensagens, se ele voltar a mandar outra mensagem, não será cadastrado novamente, apenas a mensagem será cadastrada.
Enfim, se alguém quiser dar algum palpite a respeito do que foi exposto será de grande valia.
Abraço!