Soluções OO para relacionamento polimórfico hibernate

4 respostas
A

Fala galera, tudo certo?

Estou com algumas dúvidas em um modelo OO que montei. Segue as classes:

abstract class Widget {

   int id;

   // ...

}
class Banner extends Widget {

   // outros atributos e métodos

}

Tenho um relacionamento polimorfico com Hibernate assim:

class Link {

    int template;
    int section;
    Widget widget;

    // esqueçam as anotações do hibernate

}

O problema disso é que o único atributo do widget é o ID(Utilizado pelo Hibernate). Neste caso a superclasse serviu somente para “marcar” a subclasse. Quando executo uma busca em banco, o hibernate me retorna certo o widget. Porém em algumas classes eu preciso do tipo específico. Em um exemplo básico com VRaptor, eu teria algo assim:

this.result.include("widget", widget) // ejeta a variável para o jsp

Neste exemplo eu preciso do tipo específico para acessar a variável no jsp. Não quero utilizar instanceofs para resolver o meu problema. O que vocês acham? Como eu poderia resolver este problema de uma forma melhor?

Vlw!

4 Respostas

fantomas

Você utilizou as regras de mapeamento que consideram heranças?

Não sei se entendi direito.

flws

A

Fala Fantomas, tudo certo?

Usei sim. O mapeamento está funcionando.
Eu teria duas alternativas para o mapeamento polimorfico, gerando tabelas assim:

Link
template   |    section   |    widget_id    |   type_id
     1     |        1     |          1      |    "Banner"

Banner
banner_id   |    ....
     1      |    ....

ou

Link
template   |    section   |    widget_id
     1     |        1     |          1      

Widget
widget_id   |    type
     1      |     "banner"

Banner
widget_id(PF, FK)   |    ....
     1              |    ....

Independente da solução utilizada eu teria o mesmo problema. Mesmo se eu tivesse colunas para cada tipo de widget eu ainda teria várias condições em minha regra.
Não sei se consegui deixar claro o problema. É um problema de design :-/

Vlw!

Obs: Corrigi as classes do primeiro post. Estavam sobrando alguns abstracts :stuck_out_tongue:

tveronezi

http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/queryhql.html#queryhql-polymorphism

A

O problema não é o hibernate, e sim um problema de design da minha aplicação. Mas resolvi o problema com alguns generics methods.

Vlw!

Criado 21 de agosto de 2012
Ultima resposta 22 de ago. de 2012
Respostas 4
Participantes 3