VRaptor + Mapeamento Hibernate

Ae Pessoal. To com algumas dúvidas sobre como mapear minha entidades via @Annotation do Hibernate.
A situação é a seguinte:

Tenho uma classe Usuario que possui como subclasses as classes, Endereco ( @OneToOne ) e Produto ( @OneToMany ).
A minha idéia de Produto, é que ele seja extendido para os produtos mais especificos. Por exemplo: Carro extends Produto.

Se alguém puder me dar uma ajuda, fico agradecido.

Abraço, obrigado.

tem algum motivo forte pra vc usar herança nesse caso?

o mapeamento de herança no banco de dados é meio problemático (pq não existe herança de tabelas)

então a menos que vc tenha um motivo muito forte pra essa herança, evite fazer isso.

Bom dia.

Não existe um motivo forte, eu gostaria de evitar que minha tabela Usuario tivesse 1 FK para cada Produto. Aceito sugestões, e ainda permanece a dúvida sobre mapeamento.

Aguardo, obrigado.

não é o Usuario que vai ter uma FK pra produto, é o contrário, não?

pra fazer isso vc tem que usar a anotação @Inheritance na classe produto e escolher uma das gambiarras de mapear herança no banco de dados.

o mais fácil é vc ter só a classe Produto, com um atributo sendo uma enum que define qual é o tipo do produto.

O que eu pensei é criar uma classe Produto a ser extendida pelos produtos do meu sistema. Tendo em mente que quem iria manter o ID, é a classe Produto, e as extensivas a esse Produto que manteriam os atributos mais especificos.

Alguém tem idéia de como mapear isso com Hibernate ( Annotation ) ?

Ou então me apresentar uma outra abordagem. Pois pensei também em não manter a classe Produto, e sim ligar diretamente a minha classe Usuario aos produtos com um Set.

Desde já agradeço, abraço.

Cavalcanti.

Eu não poderia, ao meu ver, usar Enum para definir o tipo do produto pois os produtos são bem distintos. Do tipo Carros, Casas…

Obrigado.

O que vc pode fazer pra fugir da herança:

  • crie uma interface Produto, que tem um método getUsuario()
  • crie cada uma das classes que representa um produto implementando essa interface, com o relacionamento @ManyToOne pra produto
  • use um dao pra fazer um “select * from Produto”, ou tente usar o @ManyToAny do hibernate.

assim o hibernate não vai fazer gambiarras no banco.