| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2010 15:29:57
|
AGAraujo
JavaTeenager
![[Avatar]](/images/avatar/614fb814b350f8a9204a5fb7e4724466.jpg)
Membro desde: 30/03/2009 07:56:35
Mensagens: 159
Offline
|
Galera, estou com um pepino aqui há algumas horas e agora estou pedindo socorro. Há algo que não estou percebendo e gostaria da ajuda de vocês.
Segue meus código e o problema.
Tudo ia bem até que eu resolvi mudar um cliente de pessoa fisica para juridica, veio o erro que não consegui resolver.
Veja só. Tudo está funcionando, inclusive as alterações e exclusões. O que não está funcionando é somente quando eu mudo de um tipo de documento para o outro(de o1:DocumentCompany para a o2:DocumentIndividual). O que estou fazendo de errado?
Desde já, obrigado!
This message was edited 2 times. Last update was at 12/07/2010 15:32:09
|
O pensamento é uma prévia dos próximos acontecimentos |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2010 15:32:15
|
tnaires
GUJ Master
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline
|
Será que não faltou o @DiscriminatorValue da classe DocumentPerson?
|
Tarso Nunes Aires
Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2010 15:33:50
|
AGAraujo
JavaTeenager
![[Avatar]](/images/avatar/614fb814b350f8a9204a5fb7e4724466.jpg)
Membro desde: 30/03/2009 07:56:35
Mensagens: 159
Offline
|
Segundo a literatura para este tipo de mapeamento não há esta necessidade.
|
O pensamento é uma prévia dos próximos acontecimentos |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2010 15:35:07
|
tnaires
GUJ Master
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline
|
Qual a razão então de haver um @DiscriminatorValue na classe DocumentCompany e não haver na DocumentPerson?
|
Tarso Nunes Aires
Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2010 15:36:58
|
AGAraujo
JavaTeenager
![[Avatar]](/images/avatar/614fb814b350f8a9204a5fb7e4724466.jpg)
Membro desde: 30/03/2009 07:56:35
Mensagens: 159
Offline
|
Desculpe-me é erro meu ao tentar fazer testes. Já estou corrigindo!
Mas isto não resolve o problema.
Obrigado.
|
O pensamento é uma prévia dos próximos acontecimentos |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2010 15:42:55
|
tnaires
GUJ Master
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline
|
Tente usar a estratégia de mapeamento JOINED. A estratégia TABLE_PER_CLASS é a que costuma dar maiores problemas de associação.
|
Tarso Nunes Aires
Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2010 17:05:44
|
AGAraujo
JavaTeenager
![[Avatar]](/images/avatar/614fb814b350f8a9204a5fb7e4724466.jpg)
Membro desde: 30/03/2009 07:56:35
Mensagens: 159
Offline
|
O problema deste método é que a necessidade de ter uma tabela única para a junção dos dados, o que não é o correto para esta modelagem.
Bom, analisando os fatos verifiquei que o problema esta na criação de um novo objeto para o atributo documento.
Quando crio um novo atributo para documento sendo que o tipo de documento é outro ocorre o problema.
Ou seja, quando o atributo documento já possui uma referência de DocumentCompany ao tentar alterar para DocumentPerson é lançado o erro.
Alguma sugestão de resolução??
|
O pensamento é uma prévia dos próximos acontecimentos |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2010 19:29:22
|
tnaires
GUJ Master
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline
|
A estratégia JOINED não mantém uma única tabela. Ela mantém uma tabela para cada classe que faz parte da hierarquia, e faz a junção um-pra-um relacionando as chaves primárias de cada tabela. Se existem 3 classes - a classe mãe e suas duas herdeiras - teremos então 3 tabelas.
Se você quer manter apenas uma tabela, então use SINGLE_TABLE.
|
Tarso Nunes Aires
Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2010 19:36:48
|
AGAraujo
JavaTeenager
![[Avatar]](/images/avatar/614fb814b350f8a9204a5fb7e4724466.jpg)
Membro desde: 30/03/2009 07:56:35
Mensagens: 159
Offline
|
Cara você tem razão. Desculpe-me pela confusão... a cabeça não é mais a mesma.
Vc falando em Join e eu pensando em tabelas unicas, nada haver.
Bom o fato é que estou lendo dois capitulos do hibernate e nada me diz como resolver isto.
Eu preciso fazer uma associação com uma classe abstrata (ou interface) e a única maneira que encontrei foi esta.
Na literatura diz que estou fazendo tudo correto, mas que este tipo de mapeamento é problemático.
A verdade é que segui todas as recomendações do capitulo 5 e 7 do Hibernate, do Bauer. (java persistence com hibernate) e tudo me leva ao mesmo erro. Isto me leva a crer que não é um problema de mapeamento e sim de contrução de objeto.
Veja o meu post anterior.
|
O pensamento é uma prévia dos próximos acontecimentos |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2010 19:44:20
|
tnaires
GUJ Master
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline
|
Como você está salvando o objeto? Está usando Session.saveOrUpdate()? Caso positivo, tente trocar por um merge().
|
Tarso Nunes Aires
Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2010 19:46:03
|
AGAraujo
JavaTeenager
![[Avatar]](/images/avatar/614fb814b350f8a9204a5fb7e4724466.jpg)
Membro desde: 30/03/2009 07:56:35
Mensagens: 159
Offline
|
O que estou pensando agora é:
Como o hibernate faz para, em tempo de execução, destruir uma referência de um atributo e consequentemente sua ligação com um banco de dados e depois eu ir lá e colocar outra no lugar de tipo diferente. Confuso? Explico!!
Em Person há um atributo de uma classe-entidade abstrata (Document). Este atributo recebe em tempo de execução seu verdadeiro tipo, ou DocumentPerson ou DocumentCompany.
Bom... então como fazer uma alteração de tipo em tempo de execução (mudar o atributo de DocumentPerson para DocumentCompany), sendo que o id é compartilhado de Person e isto fara com que o Hibernate verifique que existem dois objeto DIFERENTES com o mesmo id?
Tem mais... o hibernate precisa, além disto, resolver o fato de que um objeto deve deixar de ser persistente em detrimento do outro.
Eu vou tentar mais 1 hora e depois vou para o plano B.
|
O pensamento é uma prévia dos próximos acontecimentos |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2010 19:51:32
|
tnaires
GUJ Master
![[Avatar]](/images/avatar/5f6371c9126149517d9ba475def53139.png)
Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline
|
AGAraujo wrote:Eu vou tentar mais 1 hora e depois vou para o plano B.
Qual o plano B? Trocar pra JOINED?
This message was edited 1 time. Last update was at 12/07/2010 19:51:43
|
Tarso Nunes Aires
Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2010 19:57:15
|
AGAraujo
JavaTeenager
![[Avatar]](/images/avatar/614fb814b350f8a9204a5fb7e4724466.jpg)
Membro desde: 30/03/2009 07:56:35
Mensagens: 159
Offline
|
Não... Usar JDBC puro e simples!
Joined não funcionou tb.
This message was edited 1 time. Last update was at 12/07/2010 19:57:55
|
O pensamento é uma prévia dos próximos acontecimentos |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2010 20:32:44
|
AGAraujo
JavaTeenager
![[Avatar]](/images/avatar/614fb814b350f8a9204a5fb7e4724466.jpg)
Membro desde: 30/03/2009 07:56:35
Mensagens: 159
Offline
|
Baseado nestas instruções http://stackoverflow.com/questions/217831/how-to-use-hibernate-any-related-annotations (e no capitulo 7) do livro do Bauer, foi uma otima solução de mapeamento, mas não resolve a atualização do objeto.
Então já vi que é final de festa.
Vlw!
|
O pensamento é uma prévia dos próximos acontecimentos |
|
|
 |
|
|