Dúvida com endereço de memória das variáveis [Resolvido]

Olá, não tenho certeza se esse é o local certo para postar, então desculpem qualquer coisa

Minha dúvida é a seguinte…

Tenho uma classe com o seguinte método:

public void pesquisar()
{	
	HibernateUtil.pesquisar(this);
}

Método que ele chama:

public static void pesquisar(Object entrada)	
{ 
	Session sessao = null;
	Transaction transacao = null;
	Criteria filtro = null;

	//código da pesquisa

	entrada = entrada.getClass().cast(resultado); //resultado é do tipo Object e recebe o resultado da chamada no método Criteria.uniqueResult()
	//resto do código
}

A Instância da entidade que chamou o método HibernateUtil.pesquisar não recebe os valores da pesquisa…o jeito que eu consegui fazer funcionar foi fazendo o método retornar o valor da variável resultado, mas então o código da minha entidade ficou algo assim:

@Entity
public class Contato implements Serializable
{
	private static final long serialVersionUID = -1709644651136614756L;

	@Id
	@GeneratedValue
	private Integer codigo;

	private String email;
	private String telefone1;
	private String telefone2;
	
	public void pesquisar(){		
		Contato contato = HibernateUtil.pesquisar(this);
		email = contato.email;
		//etc		
	}
        //resto

O que não me parece um código “limpo”.
A variável entrada não deveria ter o mesmo endereço de memória que a instância que chamou o método HibernateUtil.pesquisar? Em que parte estou me confundindo?
Não faço idéia se o problema é muito simples ou não, já que só estou começando a aprender java, de qualquer forma…Obrigado pela ajuda.

Veja, para o Hibernate existe diferença entre “identidade” do objeto, e “identidade” de banco de dados, quando você compara dois objetos usando o método equals, você está usando o conceito de “identidade” de objetos, e você pode ter dois objetos em espaços de memória diferentes sendo “considerados” objetos iguais!!!
Então para as coisas ficarem melhores vamos separar a abordagem entre identidade de objetos java e identidade de objetos para o framework Hibernate.

Java:
Se quer saber se dois objetos estão na mesma posição de memória:
obj1 == obj2

Se quer saber se dois objetos são “considerados” iguais
obj1.equals(obj2)

Existe algumas dúvidas quanto ao hashcode e equals porém esse post pode ajudar muito no entendimento
http://www.guj.com.br/java/212741-scjp-duvida-hashcode-e-equals/2

Já para o Hibernate o conceito de identidade é diferente, logo voce não precisa que o objeto seja o mesmo que está na mesma posição de memória, e sim que os valores da chave primária sejam o mesmo!, desta forma se voce passar uma entidade com os valores da chave iguais, ele vai identificar no banco o objeto que possue essa identidade…

Desta forma voce poderia ter seu metodo pesquisar recebendo um Contato, e devolvendo um Contato, e na verdade não precisa nem estar ai… poderia estar em um Repository ou DAO, mas se quiser deixar ae pode mudar para algo assim:

public Contato pesquisar(Contato contato){          
    return Hibernate.pesquisar(contato); 
} 

se você criar um Contato e fizer

contato.setCodigo(1);
objContato.pesquisar(contato);

Voce está passando o contato com a identidade 1 para a chave codigo, ou seja ele vai verificar pela identidade(chave) e não pelo endereço de memória…

Att.

Obrigado pela resposta, acabei optando por criar a classe ContatoDAO mesmo, o que eu estava pensando não parece possível de forma elegante.