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:
-
@MappedSuperclass
-
public class BaseEntity
-
{
-
@Column(name = "created_by")
-
private String createdBy;
-
@Temporal(TemporalType.TIMESTAMP)
-
@Column(name = "creation_date")
-
private Calendar creationDate;
-
-
//getter setter of the properties ....
-
}
-
-
@Entity
-
public class Customer extends BaseEntity
-
{
-
@Column(name = "first_name")
-
private String firstName;
-
-
...
-
}
-
-
@Entity
-
public class Invoice extends BaseEntity {
-
@Column(name = "invoice_no")
-
private String invoiceNo;
-
-
...
-
}
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