Estou aprendendo a usar o Hibernate e jpa me deparo com o seguinte problema:
Tenho duas tabelas uma cidadao e endereco com o relacionamento um - para - um . Gostaria de que quando eu criar o cidadao ele já ter o endereco e inserir no banco automaticamente. Achei algumas que diziam para usar cascade = “save-update”. Estou usando, mas esta parecendo o seguinte erro : “attempted to assign id from null one-to-one property: cidadao”. Alguem poderia me dizer o proque do erro e como corrigir.
O mapeamento do cidadao é:
<class name="Cidadao" table="cidadao">
<!-- Identificador da classe -->
<id name="codCidadao" column="cod_cidadao" >
<generator class="native">
<param name="sequence">cidadao_cod_cidadao_seq</param>
</generator>
</id>
<!-- Propriedades da classe -->
<property name="corretude" column="corretude_cidadao" not-null="true"/>
<property name="dataCadastro" column="data_cadastro" not-null="true"/>
<property name="nomeCidadao" column="nome_cidadao"/>
<!-- Relacionamento da Classe -->
<many-to-one name="usuario" class="Usuario" fetch="select">
<column name="cod_usuario" not-null="true" />
</many-to-one>
<many-to-one name="cidadao" class="Cidadao" not-null="false" fetch="select">
<column name="cod_cidadao_pai"/>
</many-to-one>
<one-to-one name="endereco" class="endereco" cascade="save-update" />
endereco:
<class name="Endereco" table="endereco">
<!-- Identificador da classe -->
<id name="cod_cidadao" column="cod_cidadao">
<generator class="foreign">
<param name="property">cidadao</param>
</generator>
</id>
<!-- Propriedades da classe -->
<property name="endereco"/>
<property name="bairro"/>
<property name="cidade"/>
<property name="cep"/>
<!-- Relacionamento da Classe -->
<one-to-one name="cidadao" class="Cidadao" constrained="true" />
no Main eu tenho :
Endereco endereco = new Endereco();
endereco.setBairro("taguatinga");
Cidadao cidadao = new Cidadao();
cidadao.setNomeCidadao("hugo");
cidadao.setCorretude(true);
cidadao.setDataCadastro(new Date(11/11/2006));
cidadao.setEndereco(endereco);
cidadao.setUsuario(usuario);
transaction = session.beginTransaction();
session.save(cidadao);
transaction.commit();
session.close();
só um detalhe estou usando postgre !!!
Desde já agradeço a ajuda!