| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2003 11:38:02
|
Rodrigo Carvalho Auler
Virtual Machine Man
Membro desde: 14/02/2003 15:59:17
Mensagens: 576
Localização: Rio de Janeiro
Offline
|
Estou tentando usar o Hibernate. Na hora de fazer a persistência de classes simples tá beleza, mas não estou conseguindo fazer quando tenho uma classe com uma collection:
O mapeamento está assim:
Na primeira vez que tento dar um save com esse objeto, ele dá erro de NullPointerException e depois fica dizendo que a tabela tá lockada.
Alguém tem alguma idéia?
PS: estou usando o MySql 4 e a classe Email está mapeada e funcionando.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2003 11:40:43
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
Nao tenho certeza sobre o uso de arrays com o mapeamento <set>... nao seria melhor usar um java.util.Set ou uma outra Collection?
Alias, se alguem puder esclarecer isso, eu agradeco
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2003 11:52:42
|
maxguzenski
Virtual Machine Man
![[Avatar]](/images/avatar/d4c2e4a3297fe25a71d030b67eb83bfc.jpg)
Membro desde: 07/03/2003 11:47:42
Mensagens: 549
Localização: Porto Alegre
Offline
|
1º
o hibernate nao funciona com Arrays, deve-se usar List ou Set
no seu caso, que me parece ser um relacionamento de one-to-many
deve-se usar Set
2º
o relacionamento many-to-many so se usa quando se tem uma tabela intermediaria e vc quer retira-la no mappiamento.
como disse, é one-to-many, pois cada registro (1) aponta para varios (many)
3º
o Set funciona usando codigo hash e metodo equals quando acontecer colisao de codigo hash (interface Set nao aceita elementos repetidos)
aconcelho profundamente, voce redefenir os metodos "public int hashCode()" e "public boolean equals(Object o)"
para maior performace.
|
Maximiliano Ferreira Guzenski
Sun Certified Java Programmer 1.4
Sun Certified Web Component Developer 1.4
http://www.guzenski.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2003 12:04:26
|
Rodrigo Carvalho Auler
Virtual Machine Man
Membro desde: 14/02/2003 15:59:17
Mensagens: 576
Localização: Rio de Janeiro
Offline
|
Eu tentei usar List ou Set e deu o erro:
Mas eu acho que no meu caso é many-to-many sim. Veja a estrutura de tabelas:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2003 12:04:43
|
ricardolecheta
GUJ Master
![[Avatar]](/images/avatar/b59c67bf196a4758191e42f76670ceba.jpg)
Membro desde: 17/05/2003 13:42:10
Mensagens: 1486
Localização: Curitiba
Offline
|
Collections are declared by the set, list, map, bag, array and <primitive-array>
http://hibernate.bluemars.net/hib_docs/reference/html/collections.html#collections-s1-3
|
Ricardo R. Lecheta
Livro - Google Android (português)
http://www.livroandroid.com.br/
http://livroandroid.blogspot.com/
http://www.livetouch.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2003 12:06:06
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
maxguzenski wrote:aconcelho profundamente, voce redefenir os metodos "public int hashCode()" e "public boolean equals(Object o)"
para maior performace.
Cuidado com isso... redefinir equals() e hashCode() nao garante ganhos de performance, e pode levar a bugs sérios se vc não souber direito o que tá fazendo, ainda mais quando vc está trabalhando com Sets, que dependem desses métodos pra fazer a classificação dos objetos
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2003 12:11:48
|
Rodrigo Carvalho Auler
Virtual Machine Man
Membro desde: 14/02/2003 15:59:17
Mensagens: 576
Localização: Rio de Janeiro
Offline
|
Eu já tinha tentado com <array>, não tinha visto o <primitive-array>. mas dá erro de java.lang.NullPointerException.
O Mapeamento ficou assim:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2003 12:15:58
|
ricardolecheta
GUJ Master
![[Avatar]](/images/avatar/b59c67bf196a4758191e42f76670ceba.jpg)
Membro desde: 17/05/2003 13:42:10
Mensagens: 1486
Localização: Curitiba
Offline
|
java.lang.NullPointerException aonde?
para saber mais sobre as collections veja aqui;
http://www.xylax.net/hibernate/
|
Ricardo R. Lecheta
Livro - Google Android (português)
http://www.livroandroid.com.br/
http://livroandroid.blogspot.com/
http://www.livetouch.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2003 12:19:40
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
primitive-array é só pra arrays de primitivos, como o próprio nome diz... serve apenas para int[], char[], e por aí vai
Mas, afinal, pq usando <array> nao deu certo?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2003 12:44:06
|
Rodrigo Carvalho Auler
Virtual Machine Man
Membro desde: 14/02/2003 15:59:17
Mensagens: 576
Localização: Rio de Janeiro
Offline
|
O problema do NullPointerException acho que tem a ver com isso que achei no FAQ do Hibernate:
FAQ wrote:
Hibernate throws a NullPointerException when I load or query an object!
If your object has a primitive-type property mapped to a nullable database column then you will need to use a Hibernate custom type to assign a sensible default (primitive) value for the case of a null column value. A better solution is usually to use a wrapper type for the Java property.
Quanto ao erro usando <array>, o erro foi o seguinte:
O mapeamento tá assim:
Mas pra ser sincero, não sei pra que serve essa tag <index column/>, e sem ela dá o erro de java.lang.NullPointerException quando tento abrir a sessão do Hibernate.
O erro completo nesse caso é:
[]'s
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2003 12:47:44
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
O problema aqui é que vc está definindo o id "id" duas vezes - uma no objeto Empresa, e outra no array emails. Use um outro nome (sei lah, emails_id) que esse erro deve sumir
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2003 12:59:44
|
Rodrigo Carvalho Auler
Virtual Machine Man
Membro desde: 14/02/2003 15:59:17
Mensagens: 576
Localização: Rio de Janeiro
Offline
|
Acho que não é isso não: mudei a classe e o mapeamento e continua dando o mesmo erro:
Mas alguém sabe pra serve a tag <index column> ?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/08/2003 13:04:57
|
maxguzenski
Virtual Machine Man
![[Avatar]](/images/avatar/d4c2e4a3297fe25a71d030b67eb83bfc.jpg)
Membro desde: 07/03/2003 11:47:42
Mensagens: 549
Localização: Porto Alegre
Offline
|
cv wrote:
maxguzenski wrote:aconcelho profundamente, voce redefenir os metodos "public int hashCode()" e "public boolean equals(Object o)"
para maior performace.
Cuidado com isso... redefinir equals() e hashCode() nao garante ganhos de performance, e pode levar a bugs sérios se vc não souber direito o que tá fazendo, ainda mais quando vc está trabalhando com Sets, que dependem desses métodos pra fazer a classificação dos objetos 
o problema de voce deixar o equals e hashCode da classe Object, é que o hashCode retorna a posicao de memoria, e equals faz um simples " == "
o quer quer dizer, voce nao teste se a classe é equivalentemente iguais, apenas testa se sao a MESMA classe, logo classe com valores iguais vao entrar no Set sem problemas (o que pelo certo, nao devia), e varios metos de comparacao de objetos da classe Set deixam de funcionar.
http://hibernate.bluemars.net/109.html
|
Maximiliano Ferreira Guzenski
Sun Certified Java Programmer 1.4
Sun Certified Web Component Developer 1.4
http://www.guzenski.com.br |
|
|
 |
|
|