Re:Parte do controller JSF

7 respostas
guilhermehkr

Se entendi, você quer criar um paciente e também um prontuário.

Se for isto, você pode montar o paciente e montar o prontuário,com as infos que forem necessárias, inclusive o protocolo.
Já que tem os cascades mapeados, você faz o set do prontuário no objeto paciente e persiste.

Era isto?!

7 Respostas

guilhermehkr

Sim, ia acontecer isto mesmo, pois você não setou paciente em prontuário.
Fazendo isto, você fecha o bidirecionamento existente e preenche os campos nas duas tabelas.

Mas me deixe perguntar algo, como esta seu modelo ?!

Quem leva a chave primária de quem ?!
Imagino eu que prontuário tem a Fk do paciênte, correto ?!

kcobainnn

1º dica

coloque essas anotações nos getters, é recomendado, porque algumas não funcionam na declaração.

2ª dica

é um mapeamento um p/ um, então, isso tudo que você fez, na verdade, não é necessário,
só precisa de um mapeamento.

na classe paciente:

private Prontuario prontuario;

@OneToOne(cascade = CascadeType.ALL)
public Prontuario getProntuario(){ ...}

quando for salvar no banco.

paciente.setProntuario(prontuario);
dao.persist(paciente);

dá uma olhada se você tá passando o seu prontuario certo, já debugou?

Hebert_Coelho

Te aconselho a ler isso aqui @OneToOne Unidirecional e Bidirecional.

É melhor que você entenda como funcionam os relacionamentos no JPA/Hibernate. [=

raikk0n3n

Tenho duas classes

1             1

Paciente -------------- Prontuario

Eles são com anotação certas @OneToOne. porem não estou conseguindo entender como farei
quando eu salvar o Paciente e cria um Protocolo, já estou usando o cascade.

raikk0n3n

Resolvi em partes

public void salvar() {

        if (paciente.getProntuario() == null) {
            prontuario.setDataCadastro(new Date());
            prontuario.setPaciente(paciente);
            paciente.setProntuario(prontuario);
            pacienteBeans.save(paciente);
            
           
        } else {

            pacienteBeans.save(paciente);
        }

Ok criou o protocolo, mas o campo paciente na classe prontuario ficou null.

Classe Paciente

@OneToOne(cascade= CascadeType.ALL)
    @JoinColumn(name="prontuario_id")
    private Prontuario prontuario;

Classe Prontuario

@OneToOne(mappedBy="prontuario", cascade= CascadeType.ALL)
    private Paciente paciente;
raikk0n3n

Correto!

Mas eu estou setando o paciente no prontuario!!!

prontuario.setPaciente(paciente);
raikk0n3n

Resolvi

inverti as anotação mappedby entre as classes e funcionou ok

Obrigadão

Criado 16 de julho de 2012
Ultima resposta 16 de jul. de 2012
Respostas 7
Participantes 4