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.