| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/04/2009 11:22:14
|
Bruno Lacerda
JavaEvangelist
![[Avatar]](/images/avatar/85af7dbb0532ca29713840ae3711fa89.jpg)
Membro desde: 16/07/2007 11:17:52
Mensagens: 371
Localização: Rio de Janeiro
Offline
|
Boa tarde pessoal!
Seguinte, em um mapeamento 1-N e N-1 eu crio um objeto X e atribuo a ele uma lista de novos objetos Y. neste momento nem X nem Y estão atachados. Ex:
Logo em seguida, ao tentar imprimir para cada Y o nome de X relacionado como abaixo,
está dando NPE. O que está errado?
Abaixo o mapeamento entre X e Y.
This message was edited 1 time. Last update was at 14/04/2009 08:06:17
|
A morte do homem começa no instante em que ele desiste de aprender. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/04/2009 12:51:53
|
fantomas
GUJ Master
![[Avatar]](/images/avatar/a2bf57c3aee957f2aaf75aa84717b3be.jpg)
Membro desde: 24/04/2008 16:10:55
Mensagens: 1531
Localização: Terra (maior parte do tempo)
Offline
|
Experimenta executar um FLUSH na sessão, isso vai fazer com que a persistencia seja efetivada de fato. Inclusive deixe configurado para ele mostrar os sqls que estão sendo gerados para vc ver o que o ORM está fazendo.
flws
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/04/2009 13:32:18
|
Bruno Lacerda
JavaEvangelist
![[Avatar]](/images/avatar/85af7dbb0532ca29713840ae3711fa89.jpg)
Membro desde: 16/07/2007 11:17:52
Mensagens: 371
Localização: Rio de Janeiro
Offline
|
Olá fantomas.
fazendo o que você falou continua dando NPE.
Não sei se adianta mas eu estou utilizando Spring (JpaTemplate).
No método save do meu DAO eu adicionei o flush mas ainda dá NPE.
Méu método:
Quando eu seto x a cada y antes de atribuir a lista de y a x funciona direito mas eu acho que não era para ser necessário fazer isto para funcionar.
Tipo:
para cada y eu atribuo x e depois seto a lista de y em x.
Entendeu???...
|
A morte do homem começa no instante em que ele desiste de aprender. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/04/2009 15:55:24
|
fantomas
GUJ Master
![[Avatar]](/images/avatar/a2bf57c3aee957f2aaf75aa84717b3be.jpg)
Membro desde: 24/04/2008 16:10:55
Mensagens: 1531
Localização: Terra (maior parte do tempo)
Offline
|
Entendi...
A princípio também acho que deveria estar funcionando, como não vejo nada de muito óbvio no teu código...complicou. Mas mesmo assim vou dar dois chutes:
1) Você já deu uma olhada nos atributos da anotação @ManyToOne? Aqueles insertable, updatable etc....
2) No seu código vc apresentou o método x.setListaDeY( this.retornaUmaListaDeY() );, como é a implementação dele?
Se for igual a isto listaDeYs = variosYs; experimente trocar para uma implementação que adicione item a item (y a y) na lista. Isto porque a JPA / Hibernate troca o objeto do tipo lista para um tipo de lista dele dinamicamente ao gerar a instancia do objeto, talvez quando vc atribui diretamente uma instancia de outra lista que certamente não é do tipo que ele espera vc esteja "confundindo" os algoritimos dele. Faça um teste e analise com o debugger.
flws
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/04/2009 16:44:37
|
Bruno Lacerda
JavaEvangelist
![[Avatar]](/images/avatar/85af7dbb0532ca29713840ae3711fa89.jpg)
Membro desde: 16/07/2007 11:17:52
Mensagens: 371
Localização: Rio de Janeiro
Offline
|
fantomas, acho que a implementação do retornaUmaListaDeY() já está do jeito que você sugeriu. Segue:
Agora se eu passar X e setar na lista de ys funciona. Segue:
|
A morte do homem começa no instante em que ele desiste de aprender. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/04/2009 16:51:25
|
Lavieri
GUJ Master
![[Avatar]](/images/avatar/7b41bfa5085806dfa24b8c9de0ce567f.png)
Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline
|
vc não pode simplismente criar um Y, e adciona a lista de X .... vc tem que dizer a Y na relação de N-1 a referencia de X ...
sendo assim
o método setListaDeY teria que ser algo como
ou vc faz nesse ponto, ou faz no momento que vai crair X ....
eu particularmente não gosto de usar setListaDeY... eu uso métodos como
This message was edited 2 times. Last update was at 13/04/2009 17:03:42
|
Sun Certified Java Programmer (SCJP 6)
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
Meu blog -> http://blog.tomazlavieri.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/04/2009 08:04:55
|
Bruno Lacerda
JavaEvangelist
![[Avatar]](/images/avatar/85af7dbb0532ca29713840ae3711fa89.jpg)
Membro desde: 16/07/2007 11:17:52
Mensagens: 371
Localização: Rio de Janeiro
Offline
|
Entendi Lavieri.
Então o que eue achava que não era o correto é o correto.
Para cada y eu tenho que setar x e depois setar para x cada y correspondente.
Obrigado pessoal!!!
|
A morte do homem começa no instante em que ele desiste de aprender. |
|
|
 |
|
|