[Logo] Neo Framework Forum
  [Search] Busca   [Recent Topics] Tópicos Recentes   [Members]  Lista de Usuários   [Groups] De volta para a página principal 
[Register] Registrar / 
[Login] Entrar 
Método para salvar e retornar o id do javabean  XML
Índice dos Fóruns -> Dúvidas
Autor Mensagem
andre
Equipe

Membro desde: 26/11/2007 13:44:01
Mensagens: 27
Offline

Boa tarde,

Tem algum método que salve e retorne o javabean, ou pelo menos o id do javabean que foi salvo? Como o método saveOrUpdate não retorna nada, tenho fazer querys só pra pegar o id do bean que acabou de ser salvo, e quando o bean é grande a query fica bem cabulosa =).

Obrigado!
brunoefa
Equipe

Membro desde: 06/06/2007 16:33:17
Mensagens: 6
Localização: Belo Horizonte
Offline

Blz Andre!

Quando você chama o método save, ele chama o saveOrUpdate(bean) passando o bean que você deseja salvar por parâmetro. O bean é passado por referência então assim que o bean é salvo na linha seguinte ele já tem o cd carregado.

Code:
super.salvar(request, bean);

o método saveOrUpdate é chamado, logo;
Code:
bean.getCdbean

pode ser chamado.



brunoefa...
[Email] [WWW] [MSN]
andre
Equipe

Membro desde: 26/11/2007 13:44:01
Mensagens: 27
Offline

Bom dia bruno,

Na verdade, a situação é a seguinte. Tenho um bean Pessoa que possui um bean Endereço. Tenho uma tela CRUD de Pessoa que possui campos para cadastrar o endereço.
Para salvar Pessoa e o Endereco, eu preciso sobreescrever o metodo saveOrUpdate(bean) de PessoaDAO, pegar o EnderecoDAO e salvar o endereco antes de salvar a pessoa, senão dá exceção.
Após salvar o endereço, o bean Endereco que está no bean Pessoa continua com id=0, então, tenho buscar no banco o endereço que acabou de ser salvo.

Abaixo o método saveOrUpdate sobrescrito

Code:
 public void saveOrUpdate(PessoaFisica bean) {
 
     Endereco endereco = bean.getEndereco();
     EnderecoDAO enderecodao = Neo.getObject(EnderecoDAO.class);
     enderecodao.saveOrUpdate(endereco);
     if (endereco.getId() == 0) {
         endereco = newQueryBuilder(Endereco.class).from(Endereco.class)
            .whereLike("endereco.logradouro", endereco.getLogradouro())
            .whereLike("endereco.numero", endereco.getNumero())
            .whereLike("endereco.complemento",endereco.getComplemento())
            .whereLike("endereco.bairro", endereco.getBairro())
            .whereLike("endereco.cidade.nome",endereco.getCidade)
            .getNome()).list().get(0);
         bean.setEndereco(endereco);
     }
     super.saveOrUpdate(bean);
 }
 


Tem alguma forma de automatizar esse procedimento, ou essa query é necessária?
pedro.goncalves
Equipe
[Avatar]
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline

Cara.. porque você não poe o código da tabela de endereço na sessão??

Tipo.. quando é uma tela de criação.. roda o insert.. quando é tela de edição de registro, no método alterar manda setar uma propriedade na sessão para guardar o código do endereço e dps quando estiver no salvar, você recupera o id.. entendeu?

Pedro Gonçalves
http://pedrogoncalves.com.br
[Email] [WWW] [MSN]
andre
Equipe

Membro desde: 26/11/2007 13:44:01
Mensagens: 27
Offline

E ai pedro, blz

O problema é na hora de salvar pela primeira vez. Como o endereço ainda não tem id, eu preciso fazer aquela query só pra pegar o id do endereço que acabei de salvar. Neste caso, guardar o id do endereço na sessão não iria funcionar, pq sempre será zero.
Na tela de edição do registro não dá problema, pq o id já foi criado.

Valeu cara!
andre
Equipe

Membro desde: 26/11/2007 13:44:01
Mensagens: 27
Offline

Nossa que vacilo,

Esqueci de especificar o gerador automático de pk no bean endereço. Era só colocar a annotation @GeneratedValue(strategy=GenerationType.AUTO). Sem essa annotation o hibernate não coloca id nos objetos que passam de transiente para persistente. Eu sempre esqueço de colocar =P

Foi mal mesmo galera, podem até deletar o tópico, agora tá funcionando blz, e sem aquela query cabulosa.

Té mais!
pedro.goncalves
Equipe
[Avatar]
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline

ehehehe..

sem problemas!

Pedro Gonçalves
http://pedrogoncalves.com.br
[Email] [WWW] [MSN]
 
Índice dos Fóruns -> Dúvidas
Ir para:   
Powered by JForum 2.1.7 © JForum Team