Bom, tenho uma Classe “Pessoa” e uma outra tabela “ItemPessoa”, onde uma pessoa pode ter vários itens.
Porém ao tentar atualizar o cadastro de uma pessoa adicionando um novo item, o hibernate faz o seguinte com a tabela ItemPessoa:
1 - Insere o novo itemPessoa (insert into …)
2 - Atualiza todos os itemPessoa( update…)
3 - Tenta setar todos os id_pessoa da tabela itemPessoa para NULL (o que obviamente dá erro por tentar violar a restrição de que essa chave não pode ser nula).
O que pode estar ocorrendo ?
Qual tipo de mapeamento esta utilizando?
Posta a classe para que possamos verificar.
Pessoa.java
public class Pessoa extends AbstractBean {
private Integer id;
private String nome;
private Set<ItemPessoa> itens;
/*GETTERS and SETTERS*/
}
public class ItemPessoa extends AbstractBean {
private Integer id;
private String descricao;
private Pessoa pessoa;
/*GETTERS and SETTERS*/
}
Pessoa.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto-import="true">
<class name="br.com.ssd.bean.Pessoa" schema="cad" table="pessoa" dynamic-update="true">
<id name="id" type="integer">
<generator class="sequence">
<param name="sequence">cad.pessoa_id_seq</param>
</generator>
</id>
<property name="nome" type="string" column="numero" />
<set name="itens" table="cad.item_pessoa" cascade="all" outer-join="true" fetch="subselect">
<key column="id_pessoa" />
<one-to-many class="br.com.ssd.bean.ItemPessoa" />
</set>
</class>
</hibernate-mapping>
ItemPessoa.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto-import="true">
<class name="br.com.ssd.bean.ItemPessoa" schema="cad" table="item_pessoa" dynamic-update="true">
<id name="id" type="integer">
<generator class="sequence">
<param name="sequence">cad.item_pessoa_id_seq</param>
</generator>
</id>
<property name="descricao" type="string" column="descricao" />
<many-to-one name="pessoa" class="br.com.ssd.bean.Pessoa" column="id_pessoa" cascade="none" outer-join="false" />
</class>
</hibernate-mapping>