Exemplo de uso da anotação: @MappedSuperclass

59 views
Skip to first unread message

Paulo Sérgio da Silva Pacheco

unread,
Apr 3, 2014, 8:40:58 AM4/3/14
to Marcus Laprano
Herança Entidade Usando mapeada Superclasse 
POSTADO POR SHAMS ZAWOAD 
Quando me empenhado em código re-factoring do nosso projeto VELACORE, descobri que quase todas as Entidades têm quatro propriedades comuns CreatedBy, de criação, ModifiedBy e modificationDate. Eu queria reduzir essa duplicação de código e descobriu que JPA é proporcionar Mapeada Superclasse para este tipo de exigência, onde Estado e mapeamento de informações são comuns a várias classes de entidade. Ele contém estado e mapeamento de informações persistentes, mas não é Entitity. Ou seja, não é decorada com a anotação @ Entity e não é mapeado como uma entidade por JPA. 

Superclasses mapeadas não temos tabelas correspondentes no Datastore subjacente (que também era a minha obrigação). Entidades que herdam da superclasse mapeadas definir os mapeamentos de tabela. Superclasses mapeadas são especificados por decorar a classe com a anotação javax.persistence.MappedSuperclass. 

Aqui está um exemplo do uso mapeada Superclasse para entidade herança:



  1. @MappedSuperclass  
  2. public class BaseEntity  
  3. {  
  4.     @Column(name = "created_by")  
  5.     private String createdBy;  
  6.     @Temporal(TemporalType.TIMESTAMP)  
  7.     @Column(name = "creation_date")  
  8.     private Calendar creationDate;  
  9.       
  10.    //getter setter of the properties ....  
  11. }  
  12.   
  13. @Entity  
  14. public class Customer extends BaseEntity   
  15. {  
  16.     @Column(name = "first_name")  
  17.     private String firstName;  
  18.   
  19.     ...  
  20. }  
  21.   
  22. @Entity  
  23. public class Invoice extends BaseEntity {  
  24.     @Column(name = "invoice_no")  
  25.     private String invoiceNo;  
  26.   
  27.     ...  
  28. }  





No BaseEntity trecho de código acima é o MappedSuperclass que contém as informações de mapeamento das propriedades comuns. Cliente e fatura são duas entidades que se estende a BaseEntity. Neste cenário único cliente e tabelas fatura será criado no banco de dados não é o BaseEntity. "created_by" e colunas "creation_date" estará presente em ambas tabelas Customer e nota fiscal.


NOTA:
Limitações do uso de Superclasse mapeadas: 
Superclasses-mapeadas não são consultáveis, e não podem ser utilizados em operações EntityManager ou consulta. 
Superclasses-mapeadas não podem ser alvos de relacionamentos entidade.

--
 
Saudações:
Nome...: PAULO PACHECO
Fixo...: 085 3086 6769
Celular: 085 8888 4498 OI
         085 9702 4498 TIM 
 

Reply all
Reply to author
Forward
0 new messages