Persistir Coleção Hibernate

PessoALL;

Preciso da ajuda do pessoal do fórum… Tenho um objeto Pessoa, que tem uma coleção de Endereços… Essa coleção não é obrigatória, ou seja, posso salvar uma Pessoa sem endereço, e depois no alterar Pessoa, eu posso incluir endereços… O problema é que quando faço isso, o hibernate não cria o código do endereço que será salvo na tabela endereço… e gera a exceção ConstraintViolationException (visto que o código do endereço é chave primaria na tabela né…) Alguém pode me ajudar…

Minha estrutura é essa (+ou-)

Utilizo JSF e Hibernate (Open Session In View),

Mapeamento de Pessoa (Pessoa.hbm.xml)

<hibernate-mapping package="br.sdg.principal.pessoa" >

<!-- Identificador da classe -->
	<id name="pessSeq">
   		<generator class="increment"/>
  	</id>

        <set name="listaEndereco" inverse="false" cascade="all">
       	      <key column="endeSeq" />
              <one-to-many class="br.sdg.principal.pessoa.EnderecoDTO" />
        </set>

</class>
	
</hibernate-mapping>

Mapeamento de Endereço (Endereco.hbm.xml)


<class name="EnderecoDTO" table="tab_endereco">
  
  	<!-- Identificador da classe -->
	<id name="endeSeq">
   		<generator class="increment"/>
  	</id>
  
  	<!-- Propriedades da classe -->
	<property name="endeRua"/>    
	<property name="endeNume"/>
	<property name="endeComp"/>
	<property name="endeBair"/>
	
	
	<!-- Relacionamentos da classe -->
   	<many-to-one class="br.sdg.principal.pessoa.PessoaDTO" column="pessSeq" name="pessoa" cascade="none"/>
   	<many-to-one class="br.sdg.principal.dominio.TipoEnderecoDTO" column="tipeSeq" lazy="false" name="tipoEndereco"/>
	<many-to-one class="br.sdg.portal.UsuarioDTO" column="usuaSeq" name="usuario"/>
	<many-to-one class="br.sdg.principal.controle.SetorCidadeDTO" column="setoSeq" lazy="false" name="setorCidade"/>
		     	
  </class>
</hibernate-mapping>

Pra salvar faço um update assim:


public void alterar(PessoaDTO dto) throws Exception {
	HibernateUtility.getSession().update(dto);
	HibernateUtility.getSession().flush();
	HibernateUtility.getSession().evict(dto);
}

Qualquer ajuda é válida, visto que meus problemas iniciaram quando tive que tirar o lazy=“false” das coleções (decisão de projeto).

Quando você chama o método alterar, o objeto Pessoa tem uma lista de Endereço, certo?
Ao invés de chamar getSession().update… use o getSession().merge(dto). Assim, o Hibernate deve ver que existe uma nova lista (no caso Endereço) e persistir ela na tabela de Pessoas.