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
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;
..........
}
...