Relacionamento "um para um"

Boa tarde pra todos!
Eu estou começando a explorar o Hibernate agora e estou com a seguinte dúvida:
No meu programinha, eu preciso de duas classes: Contato e Endereço. Bom, um contato só pode ter um endereço, e um endereço pertence a um único contato. A tabela contato foi criada normalmente com um campo id e a tabela de endereços compartilha esse mesmo campo através de chave estrangeira.
Tenho dúvidas na codificação dessas duas classes e nos seus respectivos mapeamentos XML, com relação a definição das chaves e relacionamento, tanto no código Java quanto nos mapeamentos.
Tentei fazer algumas experiências com classes bem simples e mapeamentos XML utilizando “<one-to-one>” mas não fui muito feliz…
A versão do hibernate é a 3.0.5.
Se alguém puder me dar uma luz, eu ficaria muito grato!
Obrigado.

Ah galera seguinte… fiquei aqui quebrando a cabeça mas consegui! Vou postar o código das classes e seus mapeamentos XML para ajudar quem passa pelo mesmo problema que eu…
Novamente obrigado a todos!

Contato.java

package negocio;

import util.Data;

public class Contato &#123;
	private Integer id;
	private String nome;
	private String email;
	private Integer maxEmp;
	private Data nascimento;
	private String obs;
	private Endereco endereco;
	
	public Contato&#40;&#41; &#123;&#125;
	
	public Contato&#40;Integer id, String nome, String email, Integer maxEmp, Data nascimento, String obs, Endereco endereco&#41; &#123;
		this.setId&#40;id&#41;;
		this.setNome&#40;nome&#41;;
		this.setEmail&#40;email&#41;;
		this.setMaxEmp&#40;maxEmp&#41;;
		this.setNascimento&#40;nascimento&#41;;
		this.setObs&#40;obs&#41;;
		this.setEndereco&#40;endereco&#41;;
	&#125;

	public String getEmail&#40;&#41; &#123;
		return email;
	&#125;

	public void setEmail&#40;String email&#41; &#123;
		this.email = email;
	&#125;

	public Integer getId&#40;&#41; &#123;
		return id;
	&#125;

	public void setId&#40;Integer id&#41; &#123;
		this.id = id;
	&#125;

	public Integer getMaxEmp&#40;&#41; &#123;
		return maxEmp;
	&#125;

	public void setMaxEmp&#40;Integer maxEmp&#41; &#123;
		this.maxEmp = maxEmp;
	&#125;

	public Data getNascimento&#40;&#41; &#123;
		return nascimento;
	&#125;

	public void setNascimento&#40;Data nascimento&#41; &#123;
		this.nascimento = nascimento;
	&#125;

	public String getNome&#40;&#41; &#123;
		return nome;
	&#125;

	public void setNome&#40;String nome&#41; &#123;
		this.nome = nome;
	&#125;

	public String getObs&#40;&#41; &#123;
		return obs;
	&#125;

	public void setObs&#40;String obs&#41; &#123;
		this.obs = obs;
	&#125;
	
	public Endereco getEndereco&#40;&#41; &#123;
		return this.endereco;
	&#125;
	
	public void setEndereco&#40;Endereco endereco&#41; &#123;
		this.endereco = endereco;
	&#125;
&#125;

Contato.hbm.xml

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
	&lt;!DOCTYPE hibernate-mapping
	PUBLIC &quot;-//Hibernate/Hibernate Mapping DTD 3.0//EN&quot;
	&quot;http&#58;//hibernate.sourceforge.net/hibernate-mapping-3.0.dtd&quot;&gt;
	&lt;hibernate-mapping&gt;
		&lt;class name=&quot;negocio.Contato&quot; table=&quot;contato&quot;&gt;
			&lt;!-- Identificador da classe --&gt;
			&lt;id name=&quot;id&quot; column=&quot;con_id&quot;&gt;
				&lt;generator class=&quot;increment&quot;/&gt;
			&lt;/id&gt;
			
			&lt;!-- Propriedades da classe --&gt;
			&lt;property name=&quot;nome&quot; column=&quot;con_nome&quot; type=&quot;string&quot;/&gt;
			&lt;property name=&quot;email&quot; column=&quot;con_email&quot; type=&quot;string&quot;/&gt;
			&lt;property name=&quot;maxEmp&quot; column=&quot;con_maxemp&quot; type=&quot;integer&quot;/&gt;
			&lt;property name=&quot;nascimento&quot; column=&quot;con_nascimento&quot; type=&quot;persistencia.DataUserType&quot;/&gt;
			&lt;property name=&quot;obs&quot; column=&quot;con_obs&quot; type=&quot;string&quot;/&gt;
			
			&lt;!-- Relacionamento da classe --&gt;
			&lt;one-to-one
				name=&quot;endereco&quot;
				class=&quot;negocio.Endereco&quot;
				cascade=&quot;all&quot;
			/&gt;
		&lt;/class&gt;
	&lt;/hibernate-mapping&gt;

Endereco.java

package negocio;

public class Endereco &#123;
	private Integer id;
	
	private String rua;
	private String cep;
	private String bairro;
	private String cidade;
	private String uf;
	private Contato contato;
	
	public Endereco&#40;&#41; &#123;&#125;
	
	public Endereco&#40;Integer id, String rua, String cep, String bairro, String cidade, String uf, Contato contato&#41; &#123;
		this.setId&#40;id&#41;;
		this.setRua&#40;rua&#41;;
		this.setCep&#40;cep&#41;;
		this.setBairro&#40;bairro&#41;;
		this.setCidade&#40;cidade&#41;;
		this.setUf&#40;uf&#41;;
		this.setContato&#40;contato&#41;;
	&#125;

	public String getBairro&#40;&#41; &#123;
		return bairro;
	&#125;

	public void setBairro&#40;String bairro&#41; &#123;
		this.bairro = bairro;
	&#125;

	public String getCep&#40;&#41; &#123;
		return cep;
	&#125;

	public void setCep&#40;String cep&#41; &#123;
		this.cep = cep;
	&#125;

	public String getCidade&#40;&#41; &#123;
		return cidade;
	&#125;

	public void setCidade&#40;String cidade&#41; &#123;
		this.cidade = cidade;
	&#125;

	public Integer getId&#40;&#41; &#123;
		return id;
	&#125;

	public void setId&#40;Integer contato&#41; &#123;
		this.id = contato;
	&#125;

	public String getRua&#40;&#41; &#123;
		return rua;
	&#125;

	public void setRua&#40;String rua&#41; &#123;
		this.rua = rua;
	&#125;

	public String getUf&#40;&#41; &#123;
		return uf;
	&#125;

	public void setUf&#40;String uf&#41; &#123;
		this.uf = uf;
	&#125;
	
	public Contato getContato&#40;&#41; &#123;
		return this.contato;
	&#125;
	
	public void setContato&#40;Contato contato&#41; &#123;
		this.contato = contato;
	&#125;
&#125;

Endereco.hbm.xml

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
	&lt;!DOCTYPE hibernate-mapping
	PUBLIC &quot;-//Hibernate/Hibernate Mapping DTD 3.0//EN&quot;
	&quot;http&#58;//hibernate.sourceforge.net/hibernate-mapping-3.0.dtd&quot;&gt;
	&lt;hibernate-mapping&gt;
		&lt;class name=&quot;negocio.Endereco&quot; table=&quot;endereco&quot;&gt;
			&lt;!-- Identificador da classe --&gt;
			&lt;id name=&quot;id&quot; column=&quot;con_id&quot;&gt;
				&lt;generator class=&quot;foreign&quot;&gt;
					&lt;param name=&quot;property&quot;&gt;contato&lt;/param&gt;
				&lt;/generator&gt;
			&lt;/id&gt;
			
			&lt;!-- Propriedades da classe --&gt;
			&lt;property name=&quot;rua&quot; column=&quot;end_rua&quot; type=&quot;string&quot;/&gt;
			&lt;property name=&quot;cep&quot; column=&quot;end_cep&quot; type=&quot;string&quot;/&gt;
			&lt;property name=&quot;bairro&quot; column=&quot;end_bairro&quot; type=&quot;string&quot;/&gt;
			&lt;property name=&quot;cidade&quot; column=&quot;end_cidade&quot; type=&quot;string&quot;/&gt;
			&lt;property name=&quot;uf&quot; column=&quot;end_uf&quot; type=&quot;string&quot;/&gt;
			
			&lt;!-- Relacionamento da classe --&gt;
			&lt;one-to-one
				name=&quot;contato&quot;
				class=&quot;negocio.Contato&quot;
				constrained=&quot;true&quot;
			/&gt;
		&lt;/class&gt;
	&lt;/hibernate-mapping&gt;

Na data de nascimento do contato eu utilizei uma classe Data que eu mesmo criei, e a classe DataUserType é a classe que a representa (para tal é necessário implementar a interface UserType, mas isso já é outra história :roll: