Escolar Documentos
Profissional Documentos
Cultura Documentos
JPA Java Persistence API Mapeamento OR com Anotaes Hibernate como Provedor de Persistncia
Mapeamento Objeto-Relacional
Linguagens
Requisitos Para trabalhar com o desenvolvimento de sistemas OO com SGBDs relacionais em Java, preciso: a) implementar as classes persistentes do sistema seguindo um Design Pattern (padro de projeto) adotado pelos frameworks de persistncia; b) dispor de frameworks que realizem todo o trabalho pesado da converso O-R; c) dispor de APIs que disponibilizem classes e interfaces para manipular objetos em um contexto persistente; d) implementar recursos para o mapeamento O-R que permitam definir como os objetos em memria sero armazenados e recuperados de registros em tabelas do banco de dados; e) utilizar classes que permitem manipular os objetos no contexto persistente.
Framework Hibernate O Hibernate um framework para o Mapeamento ObjetoRelacional (ORM) escrito na linguagem Java, mas tambm disponvel em .Net como o nome NHibernate. O termo mapeamento objeto-relacional (ORM) a tcnica de mapear dados originalmente armazenados de forma relacional em um modelo de objetos. O principal objetivo do Hibernate diminuir a complexidade entre os programas Java, baseado no modelo orientado a objeto, que precisam trabalhar com um banco de dados do modelo relacional (presente na maioria dos SGDBs). Sua principal caracterstica a transformao das classes em Java para tabelas de dados e dos tipos de dados Java para os da linguagem SQL.
6
Framework Hibernate
Permite uma persistncia transparente para o desenvolvimento
das aplicaes; facilita o mapeamento dos atributos entre uma base de dados relacionais e o modelo de objetos de uma aplicao; Usa arquivos XML ou Anotaes na prprias classes para estabelecer esta relao. Est na terceira verso (maduro); um software livre de cdigo aberto distribudo com a licena LGPL.
Framework Hibernate
Instalando o Hibernate Core
Arquivos
antlr.jar cglib.jar asm.jar asm-attrs.jars commons-collections.jar commons-logging.jar hibernate3.jar javassist.jar jta.jar dom4j.jar log4j.jar hibernate-annotations.jar ejb3-persistence.jar hibernate-commons-annotations.jar hibernate-entitymanager.jar
modo declarativo de descrever mapeamento O/R, linguagem de consulta, ferramentas para manipular entidades
- A JPA foi introduzida com a plataforma Java EE 5. - Desenvolvida como parte da JSR-220 - Tecnologia EJB 3.0, a JPA se
integra homognea e consistentemente com o resto das simplificaes nas APIs EJB 3.0
- Prov comunidade Java uma nica API padro de persistncia,
provedores JPA, incluindo recursos que permitam utilizar o padro JPA para a construo de camadas de persistncia
9
10
Conceitos Bsicos Entidades (Entity): Entidades so instncias que podem ser armazenadas e recuperadas usando a API JPA. Precisa ser marcada com @Entity. Devem possuir um atributo identificador @Id que ir representar a chave primria no BD. Contexto de Persistncia: associao das instncias em memria e o contexto persistente em BD. Estado dos objetos. Gerenciador de Entidade (EntityManager): responsvel pela execuo das operaes de persistncia Provedor de Persistncia: implementa as interfaces definidas pela JPA (ex: Oracle TopLink Essentials, Hibernate Entity Manager, BEA Kodo, Apache OpenJPA) Unidade de Persistncia: Configurao do provedor JPA para localizar o banco de dados e estabelecer conexes JDBC. Mapeamento: Uso de classes e interfaces de mapeamento com o uso de anotaes (@).
11
Adicionar mapeamentos de persistncia nas classes (@Entity, @Id, @Column, @OneToMany, ...); Adicionar classes mapeadas na unidade de persistncia Adicionar Bibliotecas do Hibernate-JPA no projeto; Adicionar driver JDBC no projeto; Para usar a Persistncia: Usar Persistence.EntityManagerFactory para criar uma instncia de EntityManager usando a Unidade de Persistncia; Usar mtodos de persistncia da EntityManager (persist, merge, remove, createQuery, ...).
12
13
Arquivo de Configurao Unidade de Persistncia - XML Quando usar Firebird, adicionar manualmente a linha para o dialeto.
14
Criando uma EntityManager Para criar uma fbrica de EntityManager: EntityManagerFactory emf = Persistence.createEntityManagerFactory( "NomeUnidadePersistencia); Onde NomeUnidadePersistencia o nome dado quando a unidade de persistncia criada.
Para criar uma EntityManager: EntityManager em = emf.createEntityManager(); Com o objeto em criado, pode-se ento chamar os mtodos de persistncia de objetos, conforme exemplos a seguir.
15
//Um objeto na memria: Ator a = new Ator(1, "Julia Roberts"); // Armazenando o objeto no BD em.getTransaction().begin(); em.persist(a); em.getTransaction().commit();
ATENO: modificaes no BD s ocorrem se uma transao foi iniciada (em.getTransaction().begin();) antes de chamar o mtodo de persistncia (em.persist(a);) e no final for executado commit na transao (em.getTransaction().commit();). A transao necessria para uso com qualquer mtodo de persistncia que for modificar os dados do objeto no BD.
16
// Carregar do BD um objeto pelo seu id Ator a = em.find(Ator.class, 2); // acessando os dados do objeto carregado System.out.println( "Cdigo: "+a.getId()+ " Nome: "+a.getNome());
17
em.getTransaction().begin(); // carregar um objeto do BD Ator a = em.find(Ator.class, 2); // modificar o objeto a.setNome("Ator Modificado"); em.getTransaction().commit();
OBS: aps o commit os dados do objeto so atualizados no BD!
18
em.getTransaction().begin(); // carregar um objeto do BD Ator a = em.find(Ator.class, 2); // remover o objeto do BD em.remove(a); em.getTransaction().commit();
OBS: aps o commit, o objeto removido do BD
19
// Recupera todos os objetos Ator do BD Collection<Ator> lista = em.createQuery("from Ator).getResultList(); // percorre a lista de atores e lista seus dados for(Ator at: lista) System.out.println( " Cdigo: "+at.getId()+ " Nome: "+at.getNome());
20
Na JPA, os objetos persistentes so denominados entidades (Entities). As classes e interfaces das anotaes de mapeamento da JPA esto localizadas no pacote javax.persistence. Uma entidade rotulada com a anotao @Entity. Uma tabela representada pela anotao @Table e a chave primria pela anotao @Id. Cada coluna especificada pela anotao @Column. Associaes so mapeadas por anotaes especficas, tais como: @ManyToOne, @OneToMany, @OneToOne, @ManyToMany, @Inheritance,
21
Obrigatrio Obrigatrio
Uma classe de entidade deve seguir a conveno JavaBean para que seus atributos sejam persistentes.
22
@Id Toda classe precisa ter um identificador, que ser associado a chave primria da tabela no banco de dados. Atritutos anotados com @Id sero identificadores, tanto para as instncias de objetos da classe que est sendo mapeada como para os registros da respectiva tabela no banco de dados.
Opcional
23
@SequenceGenerator e @GeneratedValue - SEQUENCE @SequenceGenerator mapeia uma seqncia do BD. @GeneratedValue permite gerar o cdigo usando a seqncia mapeada.
Opcional
24
25
@Column Por padro, a JPA assume que o nome de cada atributo corresponde ao mesmo nome na tabela. Para modificar o mapeamento para uma coluna com o nome diferente do atributo, deve-se utilizar o atributo name, como a seguir:
Opcional
Opcional
26
@Column
podem
ser
name (String: nome do campo na tabela) nullable (boolean) length (int) unique (boolean)
27
@Column Os tipos para os atributos so definidos conforme o tipo estabelecido para cada atributo na classe.
28
29
Mapeamento de Associaes
As quatro anotaes apresentadas a seguir podem ser usadas para mapear associaes:
@OneToOne @OneToMany @ManyToOne @ManyToMany
Em muitos casos, colocar a anotao no atributo da associao o suficiente. Em alguns casos, necessrio definir alguns parmetros para as anotaes.
30
31
@ManyToOne - @JoinColumn(Opcional) A anotao @JoinColumn permite definir o nome da coluna que ser utilizada na tabela do BD para estabelecer a associao.
Opcional
Opcional
32
@OneToMany Para relacionamentos um para muitos em BD relacional. Pode-se fazer um mapeamento bidirecional, como o exemplo abaixo.
Opcional
33
@OneToOne
Caso 1: Usando a chave primria compartilhada
Opcional
Opcional
34
@OneToOne
Caso 2: Usando a chave primria diferente
Opcional
Opcional
35
@ManyToMany
A anotao @ManyToMany usada em conjunto com a anotao @JoinTable opcional e permite definir uma tabela associativa no BD. Tabelas associativas so utilizadas em SGBDs relacionais para implementar uma associao muitos para muitos. Propriedades joinColumns: Colunas que identificam a chave da entidade / owning entity inverseJoinColumns: Colunas que identificam a chave da entidade de destino / target entity
36
@ManyToMany
Opcional
37
Mapeamento de Herana
Estratgias de mapeamento de herana: Uma tabela para toda a hierarquia Todas as classes = uma tabela Uma tabela por classe concreta uma classe concreta = uma tabela Uma tabela para cada classe da hierarquia Uma classe = uma tabela
38
Opcional
39
Chave Composta
40
41
http://www.hibernate.org/hib_docs/annotations/reference/en/html/
42