(Resolvido) Mapeamento Hibernate (Update)

Estou tendo problemas ao tentar atualizar um registro no meu BD.
Acontece o seguinte: Tenho as classes Pessoa, Endereco e Usuario.
Quando eu tento atualizar um registro na base de dados, ele cria outro registro referente à tabela endereço, ele nao atualiza a tabela como deveria ser…alguem sabe onde estou errando?

Pessoa

@Entity
@Table(name = "pessoa")
@Inheritance(strategy = InheritanceType.JOINED)
public class Pessoa implements Serializable {

	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer codigo;
	@Column(length = 50, nullable = false)
	private String nome;
	@Column(length = 11, nullable = false)
	private String cpf;
	@Column(length = 50, nullable = false)
	private String email;
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "cod_endereco")
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.ALL)
	private Endereco endereco;

	// getters and setters
    
}

Endereco

@Entity
@Table(name = "endereco")
public class Endereco implements Serializable {

	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer codigo;
	@Column(length = 50, nullable = false)
	private String logradouro;
	@Column(length = 5, nullable = false)
	private String numero;
	@Column(length = 20)
	private String complemento;
	@Column(length = 50, nullable = false)
	private String bairro;
	@Column(length = 8, nullable = false)
	private String cep;
	@Column(length = 50, nullable = false)
	private String cidade;
	@Column(length = 2, nullable = false)
	private String estado;
	@OneToMany(mappedBy = "endereco", fetch = FetchType.LAZY)
	@Cascade(CascadeType.SAVE_UPDATE)
	private List<Pessoa> pessoas;

	// getters and setters
	
}

Usuario

@Entity
@Table(name = "usuario")
@PrimaryKeyJoinColumn(name = "cod_pessoa")
public class Usuario extends Pessoa implements Serializable {

	private static final long serialVersionUID = 1L;
	@Column(length = 20, nullable = false)
	private String login;
	@Column(length = 15, nullable = false)
	private String senha;
	
	// getters and setters
	
}

Código de inserção (Ok)

Usuario u = new Usuario();
u.setEmail("administrador@master.com");
u.setNome("Administrador");
u.setLogin("admin");
u.setSenha("admin");
u.setCpf("22222222222");

Endereco e = new Endereco();
e.setBairro("Centro");
e.setCep("11111111");
e.setCidade("City");
e.setEstado("SP");
e.setLogradouro("Rua C");
e.setNumero("14");
u.setEndereco(e);
UsuarioController uc = new UsuarioController();
uc.saveOrUpdate(u);

Código de alteração (cria outro registro de endereço, mesmo se eu nao atualizar nada em endereço)

Usuario u = new Usuario();
u.setCodigo(1);
u.setEmail("administrador@master.com");
u.setNome("Administrador");
u.setLogin("admin123");
u.setSenha("admin123");
u.setCpf("11111111111");

Endereco e = new Endereco();
e.setBairro("Centro");
e.setCep("11111111");
e.setCidade("City");
e.setEstado("SP");
e.setLogradouro("Rua A");
e.setNumero("123");
u.setEndereco(e);
UsuarioController uc = new UsuarioController();
uc.saveOrUpdate(u);

Log do hibernate

Hibernate: 
    insert 
    into
        endereco
        (bairro, cep, cidade, complemento, estado, logradouro, numero) 
    values
        (?, ?, ?, ?, ?, ?, ?)
Hibernate: 
    update
        pessoa 
    set
        cpf=?,
        email=?,
        cod_endereco=?,
        nome=? 
    where
        codigo=?
Hibernate: 
    update
        usuario 
    set
        login=?,
        senha=?
    where
        cod_pessoa=?

Consegui achar uma solução, nao sei se é a mais viável, porém está funcionando…caso alguém passe por isso…ta ai:

Usuario u = new Usuario();
u.setCodigo(1);
u.setEmail("administrador@master.com");
u.setNome("Administrador");
u.setLogin("admin12345");
u.setSenha("admin123");
u.setCpf("11111111111");

Endereco e = new Endereco();
e.setCodigo(getUsuario().getEndereco().getCodigo()); // o código do endereço que eu recupero do usuario q estou atualizando.
e.setBairro("Centro");
e.setCep("11111111");
e.setCidade("City");
e.setEstado("SP");
e.setLogradouro("Rua ABC");
e.setNumero("1230");
u.setEndereco(e);
UsuarioController uc = new UsuarioController();
uc.saveOrUpdate(u);

log hibernate

Hibernate: 
    update
        pessoa 
    set
        cpf=?,
        email=?,
        cod_endereco=?,
        nome=? 
    where
        codigo=?
Hibernate: 
    update
        usuario 
    set
        data_cadastro=?,
        data_expiracao_senha=?,
        cod_grupo_usuario=?,
        login=?,
        senha=?,
        status=? 
    where
        cod_pessoa=?
Hibernate: 
    update
        endereco 
    set
        bairro=?,
        cep=?,
        cidade=?,
        complemento=?,
        estado=?,
        logradouro=?,
        numero=? 
    where
        codigo=?
Endereco e = getUsuario().getEndereco(); // Pegue a instancia de Endereco do usuario para alterar....
e.setBairro("Centro");  
e.setCep("11111111");  
e.setCidade("City");  
e.setEstado("SP");  
e.setLogradouro("Rua ABC");  
e.setNumero("1230");  

u.setEndereco(e);  

Lembrando que dessa forma, você estára indiretamente atualizando TODOS os endereços das Pessoas que usam esta Instancia de Endereco.

Ok, Vlw guivirtuoso deu certinho aki…era isso mesmo q tava procurando…Abraços!!!