VRaptor + OneToManya FK

3 respostas
marcio89

Pessoal, tenho uma relação de um para muitos.

Um “Admission” possui vários “SecondaryDiagnosis”.

No meu formulário eu coloquei mais ou menos assim:

<label for="diagnostico">Diagnósticos Secundários: </label> <input type="text" name="admission.secondaryDiagnosis[0].description" id="diagnostico" class="input1"/>

Eu estou utilizando cascade.ALL e no meu controller quando eu dou save só no admission, os dados do sencondaryDiagnosis também é salvo no BD, mas a FK dele não aponta para o admission correto. A FK no registro do secondaryDiagnosis fica null.

Eu devo salvar toda a lista de secondaryDiagnosis e depois recuperar esses objetos para inserir no meu admission ?
Não sei se expliquei direito, mas se alguem puder ajudar eu agradeceria.

Valeu.

3 Respostas

Lucas_Cavalcanti

marcio,

se o relacionamento está como @OneToMany(mappedBy=…), mesmo que vc coloque o cascade ele não vai gerar o relacionamento no banco só
pelo fato de vc adicionar o objeto na lista…

vc precisa fazer dois passos sempre:

-adicionar secondaryDiagnosis na lista
-adicionar a admission no secondaryDiagnosis

marcio89

Lucas, muito obrigado pela resposta. Não por essa, mas pro várias que você já me deu aqui nesse forum. Sua ajuda ta sendo fudamental.
Muito obrigado MESMO !

A solução que encontrei foi:

public void save(Admission admission) {

for (SecondaryDiagnosis s : admission.getSecondaryDiagnoses()) {
    s.setAdmission(admission);
}

for (Comorbidity c : admission.getComorbidities()) {
    c.setAdmission(admission);
}

super.save(admission);

}

Ou seja, eu havia esquecido q a relação nesse caso é bidirecional, então tenho que atribuir o admission nas secondaryDiagnosis. antes de salvar.
Valeu.

marcio89

Lucas, muito obrigado pela resposta. Não so por essa, mas pro várias que você já me deu aqui nesse forum. Sua ajuda ta sendo fudamental.
Muito obrigado MESMO !

A solução que encontrei foi:

public void save(Admission admission) {

for (SecondaryDiagnosis s : admission.getSecondaryDiagnoses()) {
    s.setAdmission(admission);
}

for (Comorbidity c : admission.getComorbidities()) {
    c.setAdmission(admission);
}

super.save(admission);

}

Ou seja, eu havia esquecido q a relação nesse caso é bidirecional, então tenho que atribuir o admission nas secondaryDiagnosis. antes de salvar.
Valeu.

Criado 30 de março de 2012
Ultima resposta 31 de mar. de 2012
Respostas 3
Participantes 2