Objetos nulos ao gravar em aplicação JSF 2 + JPA 2

0 respostas
A

Olá pessoal.

Tenho a necessidade de persistir dois objetos @Entity de uma vez em uma “terceira” página de confirmação(as duas “primeiras” coletam as informações), um chamado Familia e outro Pessoa. As duas possuem uma relação de um-pra-um com o objeto Familia sendo o proprietário desta relação com Pessoa.

[Dentre as mensagens do log do Glassfish selecionei as mais relevantes…]
Caused by: org.postgresql.util.PSQLException: ERRO: valor nulo na coluna “id_perfil” viola a restrição não-nula

Call: INSERT INTO pessoa (especial, telefone_comercial, escola, observacao, manequim, telefone_celular, calcado, email, natal, ocupacao, data_nascimento, nome, telefone_fixo, apelido, id_familia, id_sexo, id_escolaridade, id_perfil, id_conjuge, id_estado_civil) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
bind => [null, 2159-3404, null, null, null, 3333-3333, null, null, null, Desenvolvedor, 1979-08-31, Avalci Suzano, 4444-4444, Aval, null, null, null, null, null, null]

Como vocês podem ver, ele reclama do campo “id_perfil” nulo que deveria estar com o id de um objeto perfil que eu busco com um find() (por ser padrão, nem pergunto ao usuário) no método gravar, como é mostrado abaixo.
O detalhe é que este objeto que busco sem passar pelo JSF fica nulo bem como outros que estavam em lista de objetos usados por h:selectOneMenu.
Observação: Nesta terceira página, antes de mandar gravar consigo ver o objeto Perfil normalmente através de um h:outputText. Quando gravo fica nulo

[No lado de Familia]
@JoinColumn(name = “id_responsavel”, referencedColumnName = “id”) @OneToOne(optional = false, cascade=CascadeType.ALL) private Pessoa responsavel;

[No lado de Pessoa]
@JoinColumn(name = “id_familia”, referencedColumnName = “id”) @OneToOne private Familia familia;

[As duas possuem uma chave declarada desta forma.]
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = “id”) private Integer id;

[Este é o código de gravação no meu ManagedBean]

pessoaAtual.setFamilia(familiaAtual);

pessoaAtual.setPerfil(perfis.find(1));

familiaAtual.setResponsavel(pessoaAtual);

familiaAtual.setDataCadastro(new Date());

familiaAtual.setSemana(ejbSemana.find(1));

familiaAtual.setSituacao(ejbSituacaoFamilia.find(1));

ejbFamilia.create(familiaAtual); --> Dentro desse EJB Stateless é dado um persist(familia) do meu EntityManager capturado por Injeção de Dependência. É feito somente um persist no objeto Familia pois determinei a persistência em cascata (cascade=CascadeType.ALL)

[Ferramentas]
Netbeans 6.8, GlassfishV3, JSF 2, JPA 2 com EclipseLink, PostgreSQL 8.3.

Criado 28 de janeiro de 2010
Respostas 0
Participantes 1