Gostaria que vocês pudessem me ajudar com o relacionamento <one-to-many> pois estou tendo um probleminha que eu não sei mais o que fazer… talvez precise descansar um pouco para solucionar :)…
Fiz os sequintes mapeamentos:
<class name="Cliente">
<id name="codigo" type="integer">
<generator class="sequence">
<param name="sequence">sequencia_cliente</param>
</generator>
</id>
<property name="nome" type="string"/>
<property name="CPFCNPJ" type="string"/>
<property name="identidade" type="string"/>
<property name="telefone" type="string"/>
...
<set name="Endereco"
table="endereco"
cascade="save-update, delete"
inverse="true">
<key column="codigo_cliente" not-null="true"/>
<one-to-many class="business.cliente.Endereco" />
</set>
</class>
e
<class name="Endereco">
<id name="codigo" type="integer">
<generator class="sequence">
<param name="sequence">sequencia_endereco</param>
</generator>
</id>
<property name="endereco" type="string"/>
<property name="complemento" type="string"/>
<property name="numero" type="integer"/>
<property name="bairro" type="string"/>
<property name="CEP" type="string"/>
<property name="cidade" type="string"/>
<property name="estado" type="string"/>
<property name="pais" type="string"/>
<many-to-one
class="business.cliente.Cliente"
name="Cliente"
not-null="true">
<column name="codigo_cliente" />
</many-to-one>
</class>
Bom, até aqui eu acho que está tudo bem… eu consigo recuperar os endereços de um cliente apenas solicitando Cliente sem precisar nenhuma linha de código a mais para recuperar os endereços. No entanto quando eu crio um novo Cliente e adiciono um endereço e peço para gravar o cliente, o seguinte processo ocorre:
Hibernate salva o cliente;
Hibernate:
select
nextval ('sequencia_endereco')
Hibernate:
insert
into
Cliente
(nome, CPFCNPJ, identidade, telefone, codigo_tipo, codigo)
values
(?, ?, ?, ?, ?, ?)
Hibernate salva o endereço utilizando o relacionamento que foi montado;
Hibernate:
insert
into
Endereco
(endereco, complemento, numero, bairro, CEP, cidade, estado, pais, codigo_cliente, codigo)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Porém o JDBC retorna a seguinte mensagem:
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into
Endereco (endereco, complemento, numero, bairro, CEP, cidade, estado, pais, codigo_cliente, codigo)
values (Não tem, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, 21) foi abortada.
Como vocês podem perceber, a coluna codigo_cliente responsável por identificar o endereço por cliente não foi preenchido, ou seja, quando eu adicionei um cliente novo o hibernate não atualizou o codigo_cliente para a entidade endereço.
Bom, o que estou fazendo de errado?