Esse artigo faz parte da revista SQL Magazine edição 49. Clique aqui para ler todos os artigos desta edição

dana">Desenvolvimento

Trabalhando com JPA na prática

 

O lançamento da especificação EJB 3.0 disponibiliza uma estrutura de EJB bastante simplificada, porém mais poderosa que demonstra uma preferência assinalada por anotações ao invés dos tradicionais descritores de implantação do EJB 2x. As anotações, introduzidas no J2SE 5.0, são os modificadores que podem ser usados em classes, campos, métodos, parâmetros, variáveis locais, construtores, enumerações e pacotes. O uso da anotação é destacado em um conjunto de novas características do EJB 3.0, tais como as já bastante conhecidas classes de EJB baseadas em objeto Java, injeção de dependência das classes do gerenciador de EJB, a introdução dos interceptores e uma API de persistência em Java (JPA) extremamente incrementada.

Para ilustrar os conceitos de JPA, seguiremos um exemplo real. Recentemente, meu escritório teve que desenvolver um sistema de registro de impostos. Assim como a maioria dos sistemas, ele tinha as suas próprias complexidades e desafios. Visto que um de seus desafios estava relacionado ao acesso aos dados e mapeamento objeto-relacional (ORM), decidiu-se realizar um “test-drive”, ou seja, experimentar a JPA enquanto implementávamos o sistema.

Diversos desafios foram encontrados durante o projeto:

·         Existem, naturalmente, relacionamentos entre as entidades utilizadas na aplicação;

·         O aplicativo apóia buscas complexas através dos dados relacionais;

·         O aplicativo deve garantir a integridade dos dados;

·         O aplicativo valida os dados antes de persisti-los;

·         Operações em massa são requeridas.

O modelo de dados

Primeiramente, vamos apresentar a versão reduzida do nosso modelo de dados que será suficiente para explicar as nuances do JPA. Partindo de uma perspectiva comercial, um requerente principal submete um requerimento de registro de impostos. O requerente pode ter nenhum ou mais sócios. O requerente e o sócio devem especificar dois endereços: endereço registrado e o endereço comercial. O requerente principal também deve declarar e descrever todas as penalidades que recebeu no passado. A Figura 1 apresenta o modelo de dados elaborado.

 

Figura 1. Modelo de Dados.

Definindo entidades

Definimos as entidades apresentadas na Tabela 1 através do seu mapeamento para tabelas individuais.

 

Entidade

Tabela Mapeada Para

Registration

REGISTRATION

Party

PARTY

Address

ADDRESS

Penalty

PENALTY

CaseOfficer

CASE_OFFICER

Tabela 1. Mapeamentos entre Entidades e Tabelas

Identificar as entidades para mapear as tabelas e colunas do banco de dados foi fácil. Na Listagem 1 está um exemplo simplificado da entidade REGISTRATION (introduzirei mapeamentos e configurações adicionais para esta entidade mais tarde).

 

Listagem 1. Mapeamento para a entidade REGISTRATION

@Entity

@Table(name="REGISTRATION")

 

public class Registration implements Serializable{

 

    @Id

    private int id;

 

    @Column(name="REFERENCE_NUMBER")

    private String referenceNumber;

 

   

 

   ..........

    }

 

...

Quer ler esse conteúdo completo? Tenha acesso completo