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??
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!
Dupliquei minha resposta.
leoramos coloquei o FetchType para EAGER mas nao funcionou, tem que alterar mais alguma coisa pra funcionar???
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.
Cola teu mapeamento aqui, das duas classes, por favor.
Abraço!
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 (:
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>
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 Você teria que ter algo como:
<label for="logradouro">Logradouro:</label>
<input id="logradouro" type="text" name="pessoa.endereco.logradouro" value="${pessoa.endereco.logradouro}"/>
Cara deu certo aki 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???
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…