| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/07/2010 12:16:57
|
tiagoemerick
Debugger
![[Avatar]](/images/avatar/3e30c0a4a1617a0deacf755804b59a12.png)
Membro desde: 09/04/2007 17:26:24
Mensagens: 59
Localização: Brasília - DF
Offline
|
Conceito inicial:
Tenho a seguinte classe:
Existem dois tipos de tabela 2. Tabela2_grupo1 e Tabela2_grupo2 e os dois extends Tabela2Pai e compartilham o mesmo id que está no pai.
Problema:
Ao fazer um find na minha tabela1, ele retorna normalmente o tabela2Pai com o id e o tipo da tabela(Tabela2_grupo1 ou Tabela2_grupo2).
Tem como eu fazer algum tipo de mapeamento onde ele traga os filhos a partir do pai?
Exemplo: Tabela1 tem um Tabela2Pai com id = 1 e tipoTabela = 2(Tabela2_grupo2). Gostaria então de retornar o objeto Tabela2_grupo2 e nao Tabela2_Pai.
Entenderam? Tem como?
This message was edited 1 time. Last update was at 08/07/2010 14:39:19
|
Tiago A. Emerick |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/07/2010 10:07:34
|
partenon
JavaChild
Membro desde: 27/06/2010 15:08:10
Mensagens: 103
Localização: Brno, Czech Republic
Offline
|
Nao sei se entendi, mas vc esta usando as tags para mapear esta heranca?
Por exemplo:
Ao fazer um "from Pai", ele vai retornar todos os registros (Filho1 e Filho2) como Pai, mas o tipo concreto de cada objeto vai ser Filho1 ou Filho2. Ou seja, se voce tem certeza de que todos os objetos em uma consulta sao Filho1, voce pode fazer um cast (mas dai, qual o motivo de fazer um "from Pai" ao inves de "from Filho1"?)
|
http://www.google.com/profiles/partenon |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/07/2010 10:39:56
|
tiagoemerick
Debugger
![[Avatar]](/images/avatar/3e30c0a4a1617a0deacf755804b59a12.png)
Membro desde: 09/04/2007 17:26:24
Mensagens: 59
Localização: Brasília - DF
Offline
|
Sim. estou usando as tags para a herança, mas a classe pai não é abstrata.
Acontece que eu estou fazendo "from tabela_1" que tem o Tabela2Pai. Então neste momento ele faz um "from tabela2Pai" e não o especializado "from Filho1" ou "from Filho2".
Agora ok... quando ele retorna o Pai eu consigo saber se é Filho1 ou Filho2, mas mesmo assim não é possível fazer o cast para o filho.
Tanto Filho1 quanto Filho2 tem suas especialidades.
|
Tiago A. Emerick |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/07/2010 10:44:00
|
partenon
JavaChild
Membro desde: 27/06/2010 15:08:10
Mensagens: 103
Localização: Brno, Czech Republic
Offline
|
mas mesmo assim não é possível fazer o cast para o filho.
Entao tem algo de errado Quando voce faz um "from Pai", ele retorna uma lista com objetos Filho1 e Filho2. Voce pode fazer cast para Filho1, desde que o objeto seja realmente um Filho1.
Voce pode mostrar o codigo de suas entidades com as anotacoes de heranca, assim como o codigo que busca os registros? A excecao tb seria util
|
http://www.google.com/profiles/partenon |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/07/2010 11:29:43
|
tiagoemerick
Debugger
![[Avatar]](/images/avatar/3e30c0a4a1617a0deacf755804b59a12.png)
Membro desde: 09/04/2007 17:26:24
Mensagens: 59
Localização: Brasília - DF
Offline
|
Entidade de pesquisa:
Classe Pai:
Classe Filha 1:
Classe Filha 2:
Trecho do código de pesquisa e conversão:
Erro:
|
Tiago A. Emerick |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/07/2010 11:37:25
|
partenon
JavaChild
Membro desde: 27/06/2010 15:08:10
Mensagens: 103
Localização: Brno, Czech Republic
Offline
|
Ah, agora faz mais sentido. Voce deve estar usando javassist para fazer a instrumentacao das classes, entao, ao inves de retornar um GrupoDistribuicaoInterno ou GrupoDistribuicaoExterno, ele retorna um GrupoDistribuicao instrumentado.
Ele esta instrumentando por conta do relacionamento, ou voce esta instrumentando por outro motivo? Se for por relacionamento, tenta mudar para eager ao inves de lazy, e veja se ele ainda retorna o proxy. Se ele retornar o objeto "real", fica mais facil achar uma solucao
|
http://www.google.com/profiles/partenon |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/07/2010 13:00:10
|
tiagoemerick
Debugger
![[Avatar]](/images/avatar/3e30c0a4a1617a0deacf755804b59a12.png)
Membro desde: 09/04/2007 17:26:24
Mensagens: 59
Localização: Brasília - DF
Offline
|
De fato era esse o problema mesmo!
Não sabia que por conta do proxy, ele causaria esses erros na hora do cast.
mas então.. como poderia resolver, sem deixar o EAGER?
idéia?
valeu a ajuda!
|
Tiago A. Emerick |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/07/2010 14:14:09
|
partenon
JavaChild
Membro desde: 27/06/2010 15:08:10
Mensagens: 103
Localização: Brno, Czech Republic
Offline
|
mas então.. como poderia resolver, sem deixar o EAGER?
Bom, depende da sua aplicacao. Como voce esta carregando os objetos? Dependendo, vc pode configurar sua query para fazer EAGER loading, mesmo que a configuracao seja LAZY. Mas se vc precisa usar isso em outras partes e tem problemas de performance em usar EAGER, entao a unica saida que vejo eh vc especificar uma interface para cada um dos dois filhos, para que o proxy implemente e vc possa fazer um cast.
|
http://www.google.com/profiles/partenon |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/07/2010 14:38:52
|
tiagoemerick
Debugger
![[Avatar]](/images/avatar/3e30c0a4a1617a0deacf755804b59a12.png)
Membro desde: 09/04/2007 17:26:24
Mensagens: 59
Localização: Brasília - DF
Offline
|
perfeito!
valeu!
|
Tiago A. Emerick |
|
|
 |
|
|