Fazer Update com Hibernate, com objetos relacionados OneToOne no Swing

Salve!! Sou iniciante ainda em hibernate…e não consigo achar uma forma de fazer um update quando meus objetos são relacionados…
Estava tentando fazer da seguinte forma…
Tenho o seguinte método…

public void alterar() throws AlterarException, IllegalArgumentException, ParseException, InserirException{
		montarModel();//<--Pego os dados dos campos, e adiciono aos objetos
		adverso.setPessoa(pessoa);
		pessoa.setEndereco(endereco); 
		dao.alterar(adverso);
		JOptionPane.showMessageDialog(view, "Alterado com  com Sucesso");
	}

Que chama o meu alterar da classe DAO…

public void alterar(Object obj) throws AlterarException{		
		Transaction transacao = null;
		Session sessao = null;
		try{
			sessao = getSessaoAberta();
			transacao = sessao.beginTransaction();
			sessao.update(obj);
			transacao.commit();
		}catch(Exception e){
			if(transacao != null){
				transacao.rollback();
			}
			
			throw new AlterarException("Erro ao tentar alterar o OBJETO ["+obj+"]", e);
		}finally{
			if(sessao != null){
				sessao.close();
			}
		}		
	}

Isso que estou tentando fazer, está duplicando os campos ao invés de alterar…esse meu problema pode ser resolvido com alguma annotation?? Ou terei que aprender alguma técnica diferente para se fazer isso?
:lol:

Segue um modelo de como estou montando minhas classes…usando hibernate

@Entity
@Table(name="adverso")
public class AdversoVO {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column (name="cd_adverso")
	private Integer cd_adverso;
	
	@Column(name="observacoes", nullable=false, length=200)
	private String observacoes;

	@OneToOne
	@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
	private PessoaVO pessoa;

	public final Integer getCd_adverso() {
		return cd_adverso;
	}

	public final void setCd_adverso(Integer cd_adverso) {
		this.cd_adverso = cd_adverso;
	}

	public final String getObservacoes() {
		return observacoes;
	}

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

	public final PessoaVO getPessoa() {
		return pessoa;
	}

	public final void setPessoa(PessoaVO pessoa) {
		this.pessoa = pessoa;
	}

	
	public AdversoVO(Integer cd_adverso, String observacoes, PessoaVO pessoa) {
		super();
		this.cd_adverso = cd_adverso;
		this.observacoes = observacoes;
		this.pessoa = pessoa;
	}

	public AdversoVO(){}
}