Você está na página 1de 42

PERSISTENCIA COM JAVA

JPA Java Persistence API Mapeamento OR com Anotaes Hibernate como Provedor de Persistncia

Prof. Jaqson Dalbosco jaqson@upf.br

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Mapeamento Objeto-Relacional
Linguagens

de Programao orientadas a objetos e SGBDs relacionais = complexidade de implementao

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

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.

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Classes Persistentes JavaBeans


public class Ator implements java.io.Serializable { private Integer id; private String nome; public Ator(){ } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } } 4

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Classes persistentes modelo de negcio

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

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.

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

JPA - Java Persistence API


padronizar o acesso aos frameworks de mapeamento O/R e se baseia nas melhores idias de tecnologias de persistncia como Hibernate, TopLink, e JDO.
- Soluo completa para mapeamento e persistncia de objetos: - Consiste de um conjunto de interfaces e anotaes que visam

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,

com a liberdade de escolha do provedor (implementao)

- Rapidamente os frameworks se adaptaram para funcionar como

provedores JPA, incluindo recursos que permitam utilizar o padro JPA para a construo de camadas de persistncia
9

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Java Persistence API

10

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Passos para criar uma aplicao Java com BD


Criar um Banco de Dados para o projeto; Criar um novo projeto Java; Criar uma Unidade de Persistncia para o projeto; Criar as classes de entidade JavaBeans;

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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Arquivo de Configurao Unidade de Persistncia - Visual

13

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Arquivo de Configurao Unidade de Persistncia - XML Quando usar Firebird, adicionar manualmente a linha para o dialeto.

14

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Usando EntityManager para persistir um objeto

//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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Usando EntityManager para carregar um objeto

// 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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Usando EntityManager para alterar um objeto

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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Usando EntityManager para remover um objeto

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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Usando EntityManager para listar objetos

// 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

Mapeamento Objeto Relacional (ORM)


Mapeamentos Usando Anotaes

PERSISTNCIA COM JAVA

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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@Entity Anotao associada a classes Java. Determina que a classe persistente.

Obrigatrio Obrigatrio

Uma classe de entidade deve seguir a conveno JavaBean para que seus atributos sejam persistentes.

22

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@SequenceGenerator e @GeneratedValue - SEQUENCE @SequenceGenerator mapeia uma seqncia do BD. @GeneratedValue permite gerar o cdigo usando a seqncia mapeada.

Opcional

24

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@SequenceGenerator e @GeneratedValue Max() Gerar o Id com uso da funo de agregao max().

OBS: GenericGenerator uma anotao especfica do Hibernate

25

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@Column Outros atributos para a anotao adicionados, como os seguintes:


@Column

podem

ser

name (String: nome do campo na tabela) nullable (boolean) length (int) unique (boolean)

27

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@Column Os tipos para os atributos so definidos conforme o tipo estabelecido para cada atributo na classe.

Tambm pode se utilizada a anotao @Lob

28

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@Temporal Para informaes TIMESTAMP) relacionadas ao tempo (DATE, TIME e

29

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@ManyToOne Para relacionamento muitos para um em BD relacional

31

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@ManyToOne - @JoinColumn(Opcional) A anotao @JoinColumn permite definir o nome da coluna que ser utilizada na tabela do BD para estabelecer a associao.

Opcional

Para a associao ser obrigatria

Opcional

32

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@OneToMany Para relacionamentos um para muitos em BD relacional. Pode-se fazer um mapeamento bidirecional, como o exemplo abaixo.

Opcional
33

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@OneToOne
Caso 1: Usando a chave primria compartilhada

Opcional

Opcional
34

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@OneToOne
Caso 2: Usando a chave primria diferente

Opcional

Opcional

35

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@ManyToMany

Opcional

37

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

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

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Mapeamento de Herana Tabela por Classe

Opcional

39

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Chave Composta

40

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

@NamedQuery Cria consulta prdefinida (esttica) associado com a @Entity

41

Mapeamento Objeto Relacional (ORM)

PERSISTNCIA COM JAVA

Mais sobre Mapeamentos com Anotaes

http://www.hibernate.org/hib_docs/annotations/reference/en/html/

42

Você também pode gostar