[RESOLVIDO] Como retornar os dados de um relacionamento one to one hibernate?

10 respostas
Jhoseph_Araujo

Acontece o seguinte, tenho duas classes pessoa e endereço. Para adicionar acontece td bem, mas na hora de editar quando é para carregar os dados só carrega os dados da pessoa os do endereço ficam vazios?? Tem como carregar eles para editar no mesmo formulário usando o vraptor??

10 Respostas

leoramos

Qual o FetchType do relacionamento? Se estiver LAZY, só carregando na mão.
Senão, usa EAGER, que aí carrega sozinho e é só alegria (use com sabedoria, senão fica lento que é o cão).

Abraço!

leoramos

Dupliquei minha resposta.

Jhoseph_Araujo

leoramos coloquei o FetchType para EAGER mas nao funcionou, tem que alterar mais alguma coisa pra funcionar???

Jhoseph_Araujo

estou seguindo a fj28, e tem uma parte para editar onde eu preciso carregar o produto (no eu caso pessoa), só que retorna apenas os dados da pessoa o endereço dela não vem junto, esse é meu problema.

leoramos

Cola teu mapeamento aqui, das duas classes, por favor.
Abraço!

mondor

o que você está utilizando no value do seu input?

está dando alguma exception?

${pessoa.endereco.id} ou não sei qual seu atributo, põe seu código! não temos como adivinhar (:

Jhoseph_Araujo

minha classe pessoa esta com o relacionamento assim

....
    @NotFound(action=NotFoundAction.IGNORE)
    @OneToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
    public Endereco getEndereco() {
        return endereco;
    }
.....

a classe carrega pessoa

...
 public Pessoa carrega(int id) {
        return (Pessoa) session.load(Pessoa.class, id);
    }
...

meu PessoaController …

...
 public Pessoa edita(int id){
        return pessoaDao.carrega(id);
    }

    public void altera(Pessoa pessoa, Endereco endereco){
        validator.onErrorUse(Results.page()).of(PessoaController.class).formulario();
        pessoaDao.atualiza(pessoa,endereco);
        result.redirectTo(this).lista();
    }
...

e meus inputs da pagina de edição estão assim …

<form action="altera">
            <fieldset style="width: 620px">
                <legend>Informações do Meliante</legend>
                <input type="hidden" id="idusuario" name="pessoa.idpessoa" value="${pessoa.idpessoa}"/>

                <label for="nome">Nome:</label>
                <input id="nome" type="text" name="pessoa.nome" value="${pessoa.nome}"/>

                <label for="apelido">Apelido:</label>
                <input id="apelido" type="text" name="pessoa.apelido" value="${pessoa.apelido}"/><br/>

                <label for="mae">Nome da Mãe:</label>
                <input id="mae" type="text" name="pessoa.mae" value="${pessoa.mae}"/>

                <label for="pai">Nome do Pai:</label>
                <input id="pai" type="text" name="pessoa.pai" value="${pessoa.pai}"/><br/>

                <label for="telefone">Telefone:</label>
                <input id="telefone" type="text" name="pessoa.telefone" value="${pessoa.telefone}"/><br/>

                <label for="cpf">CPF:</label>
                <input id="cpf" type="text" name="pessoa.cpf" value="${pessoa.cpf}"/>

                <label for="pai">RG:</label>
                <input id="rg" type="text" name="pessoa.rg" value="${pessoa.rg}"/><br/>

                <label for="datanasc">Data de Nascimento:</label>
                <input id="datanasc" type="text" name="pessoa.datanasc" value="${pessoa.datanasc}"/>

                <label for="dataprisao">Data da Prisão:</label>
                <input id="dataprisao" type="text" name="pessoa.dataprisao" value="${pessoa.dataprisao}"/><br/>

                <label for="motivoprisao">Motivo da Prisão:</label>
                <textarea id="motivoprisao" name="pessoa.motivoprisao" >${pessoa.motivoprisao}</textarea>
            </fieldset>
            <fieldset style="width: 620px">
                <legend>Endereço do Meliante</legend>

                <label for="logradouro">Logradouro:</label>
                <input id="logradouro" type="text" name="endereco.logradouro" value="${endereco.logradouro}"/>

                <label for="numero">Número:</label>
                <input id="numero" type="text" name="endereco.numero" value="${endereco.numero}"/><br/>

                <label for="cidade">Cidade:</label>
                <input id="cidade" type="text" name="endereco.cidade" value="${endereco.cidade}"/>

                <label for="bairro">Bairro:</label>
                <input id="bairro" type="text" name="endereco.bairro" value="${endereco.bairro}"/><br/>

                <label for="estado">UF:</label>
                <input id="estado" type="text" name="endereco.estado" value="${endereco.estado}" size="2" maxlength="2"/>

                <label for="cep">CEP:</label>
                <input id="cep" type="text" name="endereco.cep" value="${endereco.cep}"/><br/>

            </fieldset>
            <button type="submit">Enviar</button>
        </form>
N

você tem um método edita(int id) que retorna uma Pessoa, ou seja, o endereço está em Pessoa, algo como Pessoa.endereco… logo não tem como ele aparecer na sua página, pois vc separou os dois :slight_smile: Você teria que ter algo como:

<label for="logradouro">Logradouro:</label>  
                <input id="logradouro" type="text" name="pessoa.endereco.logradouro" value="${pessoa.endereco.logradouro}"/>
Jhoseph_Araujo

Cara deu certo aki :smiley: Vlw mesmo nosbor84. No caso entao para gravar eu poderia fazer normal como na apostila só que na hora de gravar o endereco eu mapear da forma que vc colocou pessoa.endereco.logradouro no caso seria isso???

N

isso mesmo. No seu método gravar vc não precisa ter dois objetos, basta ter Pessoa, já que ele tem a propriedade agregada Endereco. Preenche tudo e deixa o hibernate fazer o restante do serviço…

Criado 14 de junho de 2011
Ultima resposta 14 de jun. de 2011
Respostas 10
Participantes 4