Bom dia,
Gostaria muito da ajuda para resolver um problema.
Na aplicação que estou trabalhando há um cadastro de alunos, ao cadastrar um aluno é opcional que ele tenha um responsável legal, tal classe está assim:
aluno.java
public class Aluno implements java.io.Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="id_creator")
@Column(name="id_aluno")
private Long id;
@OneToOne(cascade={CascadeType.ALL})
@JoinColumn(name="id_responsavel")
private AlunoResponsavel responsavel = new AlunoResponsavel();
//more code
}
Para inserção de novos registros com/sem responsável legal está funcionando perfeitamente. O problema enfrentado está na hora de “alterar”.
Caso eu selecione uma registro para edição no datatable, na hora de salvar o seguinte erro é apresentado:
/pages/aluno/form.xhtml @103,202 value="#{alunoBean.aluno.responsavel.nome}": Target Unreachable, 'responsavel' returned null
Acredito que esteja correto o atributo Responsavel desse objeto esta Null, pois o Aluno em questão não tem mesmo. Fiz até umas tentivas frustradas para resolver, mas não deu certo.
Tentei passar uma nova instancia do Responsavel para o objeto e o hibernate de imediato tentou persistir tal objeto.
listagem.xhtml
<p:column style="width:32px">
<p:commandButton id="btnEditAluno" action="#{alunoBean.edit}" value="#{bundle.btnEditar}" ajax="false" icon="edit">
<f:setPropertyActionListener value="#{row}" target="#{alunoBean.aluno}" />
</p:commandButton>
</p:column>
ManagedBean
public String edit(){
//não dá certo!!
//if(this.aluno.getResponsavel()== null)
// this.aluno.setResponsavel(new AlunoResponsavel());
return "/pages/aluno/edit.jsf";
}
Resumindo, para que eu consiga realizar a alteração, é necessário que o atributo responsável do objeto aluno esteja instanciado.
Como devo proceder após recuperar um objeto onde a relação esteja nula?
Desde já agradeço.
