Hibernate Annotations - Herança

1 resposta
thiagoaos

Olá, tenho em meu modelo relacional as tabelas grupo de revisao, grupo de compras e grupo classe item.

E no meu modelo oo, eu tenho uma entidade abstrata grupo, e 3 entidades concretas GrupoRevisao, GrupoCompras e GrupoClasseItem.

Queria saber como mapear isso, já que na entidade Abstrada, eu tenho codigo e + alguns atributos comuns entre os grupos, tais como nome e descricao. E nas entidades concretas eu tenho atributos especificos de cada uma.

tava olhando a documentacao e vi a tag @MappedSuperclass, eu devo usar essa anotacao na entidade abstratada e mapear os atributos dela? e nas entidades concretas usar @Entity normal? mas vai ter algum problema se o @Id estiver na entidade abstrata?

Aproveitando, qual a diferenca de eu usar a anotacao no metodo ou no atributo, existe algumas boas praticas?

*eu tava vendo aqui mas tem um outro problema referente ao ID, porque nas tabelas do banco o nome do Id difere na tabela, aqui na empresa o padrao é COD_NOMEDATABELA. sendo que na classe abstrata o id eu declarei como private Integer codigo; dai eu vou ter que sobrescrever utilizando @AttributeOverrides? mas como eu vou fazer isso se nas entidades concretas eu nao tenho o atributo codigo?

Grato,
Thiago

1 Resposta

thiagoaos

consegui resolver

@MappedSuperclass
public abstract class Grupo {
   
   private String  nome;
   private String  descricao;
@Entity
@Table(name="GRUPO_REVISAO")
@SequenceGenerator(name="SEQ_GRUPO_REVISAO",
               sequenceName="SEQ_GRUPO_REVISAO",
               allocationSize = 1)
@AttributeOverrides( { @AttributeOverride(name="nome"     , column = @Column(name="NOM_GRUPO_REVISAO") ),
                     @AttributeOverride(name="descricao", column = @Column(name="DES_GRUPO_REVISAO") ) } )
public class GrupoRevisao extends Grupo{
   @Id
   @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_GRUPO_REVISAO")
   @Column(name="COD_GRUPO_REVISAO")
   private Integer codigo;
...
Criado 13 de setembro de 2006
Ultima resposta 13 de set. de 2006
Respostas 1
Participantes 1