SlideShare uma empresa Scribd logo
1 de 55
Persistência com JPA2 e
Hibernate
Fernando Oliveira
O que é persistência?
Modelo
Relacional
CREATE TABLE user(
id int not null primary key,
name varchar(255) not null
);
CREATE TABLE post (
id int not null primary key,
title varchar(255) not null,
content text not null,
author_id int not null,
FOREIGN KEY (author_id)
REFERENCES user(id)
);
Modelo Orientado
a Objeto
public class User {
private Integer id;
private String name;
…
}
public class Post {
private Integer id;
private String title;
private String content;
private User author;
…
}
ORM
Object-relational Mapping
JPA
Java Persistence API
Onde baixar…
http://www.hibernate.org/
Configuração
O Hibernate deve ser configurado no
arquivo src/META-INF/persistence.xml
persistence.xml
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="BESSAS_DB" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
<property name="hibernate.hbm2ddl.auto" value="create" />
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<property name="javax.persistence.jdbc.user" value="postgres" />
<property name="javax.persistence.jdbc.password" value="postgres" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="javax.persistence.jdbc.url"
value="jdbc:postgresql://localhost:5432/usuario" />
</properties>
</persistence-unit>
</persistence>
Mapeamento
@Entity
Define que a classe representa uma entidade do
banco de dados
@Entity
public class Usuario {
.
.
.
}
@Table
Permite definir algumas configurações para as
entidades mapeadas como por exemplo o nome da
tabela:
@Entity
@Table(name=“user”)
public class Usuario {
.
.
.
}
@Id
Indica qual atributo da classe será mapeado
como chave primária:
@Entity
@Table(name=“user”)
public class Usuario {
@Id
private Integer id;
.
.
}
@GeneratedValue
Usado junto com @Id para indicar que o id será
gerado automaticamente:
@Entity
@Table(name=“user”)
public class Usuario {
@Id
@GeneratedValue(generator = “id”, strategy =
GenerationType.IDENTITY)
private Integer id;
}
@Column
Define configurações das colunas:
@Entity
@Table(name=“user”)
public class Usuario {
@Id
@GeneratedValue(generator = “id”, strategy = GenerationType.IDENTITY)
private Integer id;
@column (length=255, nullable=false)
private String nome;
@column(nullable=false, length=11, unique=true)
private String cpf;
}
@Transient
Informa que a propriedade não deve ser persistida:
@Entity
@Table(name=“user”)
public class Usuario {
@Id
@GeneratedValue(generator = “id”, strategy = GenerationType.IDENTITY)
private Integer id;
@column (length=255, nullable=false)
private String nome;
@column(nullable=false, length=11, unique=true)
private String cpf;
@Transient
private String retornoTratado;
}
Entity Manager
Obtendo um entityManager
public Usuario save (Usuario usuario) {
EntityManagerFactory factory =
Persistence.createEntityManagerFactory(“BESSAS_DB”);
EntityManager manager = factory.createEntityManager();
.
.
.
}
Transação
É uma sequência de operações num SGBD que
são tratadas como um bloco único e indivisível
Sincronização com o Banco de Dados
É a propagação das remoções, alterações e inserções para o
banco de dados.
Ocorre quando chamamos o método commit de uma
transação.
Podemos usar o método flush para fazer uma sincronização
sem finalizar a transação.
Ciclo de vida das Entidades
Persistindo
public void saveOrUpdate (Usuario usuario) {
EntityManagerFactory factory =
Persistence.createEntityManagerFactory(“BESSAS_DB”);
EntityManager manager = factory.createEntityManager();
manager.getTransaction().begin();
try {
manager.persist(usuario);
manager.getTransaction().commit();
} catch (Exception e) {
manager.getTransaction().rollback();
} finally {
manager.close();
}
factory.close();
}
Buscar objeto
public Usuario buscar (Integer id) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory(“BESSAS_DB”);
EntityManager manager = factory.createEntityManager();
manager.getTransaction().begin();
Usuario usuario = new Usuario();
try {
Usuario usuario = manager.find(Usuario.class, id)
manager.getTransaction().commit();
} catch (Exception e) {
manager.getTransaction().rollback();
} finally {
manager.close();
}
factory.close();
return usuario;
}
Remover objeto
public Usuario remover (Usuario) {
EntityManagerFactory factory =
Persistence.createEntityManagerFactory(“BESSAS_DB”);
EntityManager manager = factory.createEntityManager();
manager.getTransaction().begin();
try {
Usuario usuario = manager.remove(usuario);
manager.getTransaction().commit();
} catch (Exception e) {
manager.getTransaction().rollback();
} finally {
manager.close();
}
factory.close();
}
Listando objetos
public List<Usuario> lista () {
EntityManagerFactory factory = Persistence.createEntityManagerFactory(“BESSAS_DB”);
EntityManager manager = factory.createEntityManager();
manager.getTransaction().begin();
List<Usuario> usuarios = new ArrayList<Usuario>();
try {
Query query = manager.createQuery("SELECT u FROM Usuario u");
usuarios = query.getResultList();
manager.getTransaction().commit();
} catch (Exception e) {
manager.getTransaction().rollback();
} finally {
manager.close();
}
factory.close();
}
Vamos melhorar o nosso projeto
Open Session in View
Classe JPAFilter
public class JPAFilter implements Filter {
private EntityManagerFactory factory;
@Override
public void init(FilterConfig arg0) throws ServletException {
this.factory = Persistence.createEntityManagerFactory("BESSAS_DB");
}
@Override
public void destroy() {
this.factory.close();
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// Implementação aqui...
}
}
Implementação do método doFilter
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
EntityManager entityManager = this.factory.createEntityManager();
request.setAttribute("EntityManager", entityManager);
entityManager.getTransaction().begin();
chain.doFilter(request, response);
try {
entityManager.getTransaction().commit();
} catch (Exception e) {
entityManager.getTransaction().rollback();
} finally {
entityManager.close();
}
}
Adicionando o método getEntity a
classe Usuario
private EntityManager getEntityManager () {
HttpServletRequest request = ServletActionContext.getRequest();
EntityManager manager = (EntityManager)
request.getAttribute("EntityManager");
return manager;
}
Recebendo o entityManager no nosso
dao
private EntityManager manager;
public UsuarioDAO (EntityManager manager) {
this.manager = manager;
}
Refatorando os métodos do DAO
public void saveOrUpdate (Usuario usuario) {
this.manager.persist(usuario);
}
public Usuario buscar(Integer id) {
return this.manager.find(Usuario.class, 1);
}
public void remove(Usuario usuario) {
manager.remove(usuario);
}
public List<Usuario> lista () {
Query query = manager.createQuery("SELECT u FROM Usuario u");
return query.getResultList();
}
No controller
@Override
public String execute() throws Exception {
EntityManager manager = this.getEntityManager();
UsuarioDAO dao = new UsuarioDAO(manager);
dao.adiciona(this.usuario);
return AdicionaUsuarioAction.SUCCESS;
}
Relacionamentos
@OneToOne
@OneToMany
@ManyToOne
@ManyToMany
@OneToOne
@JoinColumn ( name =" gov_id ")
O Padrão seria “governador_id”
@OneToMany
@ManyToOne
@JoinColumn ( name =” cli_id ")
O Padrão seria “cliente_id”
@ManyToMany
@JoinTable ( name =" Liv_Aut ",
joinColumns = @JoinColumn ( name =" Liv_ID "),
inverseJoinColumns = @JoinColumn ( name =" Aut_ID "))
private Collection <Autor > autores ;
O Padrão seria “livro_autor”
Lazy e Eager
@Basic(fetch=FetchType.LAZY)
@ManyToOne ( fetch = FetchType . LAZY )
Define que a propriedade não deve ser trazida do
banco no mesmo momento em que o Objeto.
@Basic(fetch=FetchType.EAGER)
@OneToOne ( fetch = FetchType . EAGER)
Define que a propriedade deve ser trazida do banco
no mesmo momento em que o Objeto.
Herança
Single Table
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
Joined
@Inheritance ( strategy = InheritanceType . JOINED )
Table Per Class
@Inheritance ( strategy = InheritanceType .
TABLE_PER_CLASS )
Herança
@Entity
public class Pessoa {
@Id @GeneratedValue
private Long id;
private String nome ;
// GETTERS E SETTERS
}
Suponha que tenhamos as classes abaixo:
@Entity
public class PessoaJuridica extends
Pessoa {
private String cnpj ;
// GETTERS E SETTERS
}
@Entity
public class PessoaFisica extends Pessoa
{
private String cpf ;
// GETTERS E SETTERS
}
Herança
Single Table
@Inheritance(strategy=InheritanceType.SINGLE
_TABLE)
Herança
Joined
@Inheritance ( strategy = InheritanceType .
JOINED )
Herança
Table Per Class
@Inheritance ( strategy = InheritanceType .
TABLE_PER_CLASS )
JPQL
Java Persistence Query Language
Query query = manager . createQuery ( “SELECT u FROM Usuario”);
JPQL
Paginação
query . setFirstResult (10) ;
query . setMaxResults (20) ;
JPQL
Operadores
<
>
AND
OR
MEMBER OF
BETWEEN
IS EMPTY
Etc…
GERANDO O BANCO DE DADOS
GERANDO AS TABELAS
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.hbm2ddl.auto" value=”create" />
Algumas recomendações
Estude inglês desde cedo.
Fluência necessita tempo e prática.
Independente da linha
que você seguir
(técnica, teórica,
acadêmica).
O importante é você
não ser simplesmente
bom, mas o melhor
naquilo que você faz.
Busque excelência técnica...
Fique atento para oportunidades, mesmo que não
sejam exatamente o que você esperava. Pense nos
resultados a longo prazo.
Não tenha
medo de
errar.
Na vida você
aprende mais
com os erros
do que com
os acertos.
Thanks a lot!
Fernando Oliveira
nandooliveira.al@gmail.com
Skype: nandooliveira3

Mais conteúdo relacionado

Mais procurados

Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlPaulo Damas
 
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomPersistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomNelson Glauber Leal
 
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0Elvis Rocha
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
 
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonMinicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonRicardo Longa
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 
Entenda o ciclo de vida das entidades jpa
Entenda o ciclo de vida das entidades jpaEntenda o ciclo de vida das entidades jpa
Entenda o ciclo de vida das entidades jpaMoisesInacio
 
Combatendo code smells em aplicações Java
Combatendo code smells em aplicações JavaCombatendo code smells em aplicações Java
Combatendo code smells em aplicações JavaEmmanuel Neri
 
Android DevConference - Data Binding: Código limpo, manutenção garantida
Android DevConference - Data Binding: Código limpo, manutenção garantidaAndroid DevConference - Data Binding: Código limpo, manutenção garantida
Android DevConference - Data Binding: Código limpo, manutenção garantidaiMasters
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend FrameworkJaime Neto
 
Javascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQueryJavascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQueryWesley Lemos
 
Aumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsAumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsNelson Glauber Leal
 

Mais procurados (20)

Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sql
 
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomPersistência de Dados no SQLite com Room
Persistência de Dados no SQLite com Room
 
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonMinicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
 
Vraptor
VraptorVraptor
Vraptor
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Ajax em java
Ajax em javaAjax em java
Ajax em java
 
Aprenda jQuery 1.3
Aprenda jQuery 1.3Aprenda jQuery 1.3
Aprenda jQuery 1.3
 
Programação Web com jQuery
Programação Web com jQueryProgramação Web com jQuery
Programação Web com jQuery
 
Entenda o ciclo de vida das entidades jpa
Entenda o ciclo de vida das entidades jpaEntenda o ciclo de vida das entidades jpa
Entenda o ciclo de vida das entidades jpa
 
Jquery a technical overview
Jquery a technical overviewJquery a technical overview
Jquery a technical overview
 
Combatendo code smells em aplicações Java
Combatendo code smells em aplicações JavaCombatendo code smells em aplicações Java
Combatendo code smells em aplicações Java
 
Javascript avançado
Javascript avançadoJavascript avançado
Javascript avançado
 
Android DevConference - Data Binding: Código limpo, manutenção garantida
Android DevConference - Data Binding: Código limpo, manutenção garantidaAndroid DevConference - Data Binding: Código limpo, manutenção garantida
Android DevConference - Data Binding: Código limpo, manutenção garantida
 
PHP ao Extremo
PHP ao ExtremoPHP ao Extremo
PHP ao Extremo
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend Framework
 
Javascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQueryJavascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQuery
 
Aumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsAumentando a produtividade com Android Libs
Aumentando a produtividade com Android Libs
 

Destaque

JPQL/ JPA Activity 1
JPQL/ JPA Activity 1JPQL/ JPA Activity 1
JPQL/ JPA Activity 1SFI
 
My sql explain & select
My sql explain & selectMy sql explain & select
My sql explain & selectMing-Ying Wu
 
FinelyMe-JustFit Intro
FinelyMe-JustFit IntroFinelyMe-JustFit Intro
FinelyMe-JustFit IntroCheng Ta Yeh
 
JPQL/ JPA Activity 2
JPQL/ JPA Activity 2JPQL/ JPA Activity 2
JPQL/ JPA Activity 2SFI
 
JPQL/ JPA Activity 3
JPQL/ JPA  Activity 3JPQL/ JPA  Activity 3
JPQL/ JPA Activity 3SFI
 
Spring Data Neo4j Intro SpringOne 2011
Spring Data Neo4j Intro SpringOne 2011Spring Data Neo4j Intro SpringOne 2011
Spring Data Neo4j Intro SpringOne 2011jexp
 
Git rerere
Git rerereGit rerere
Git rerereSean Lee
 
Using the latest Java Persistence API 2 Features - Tech Days 2010 India
Using the latest Java Persistence API 2 Features - Tech Days 2010 IndiaUsing the latest Java Persistence API 2 Features - Tech Days 2010 India
Using the latest Java Persistence API 2 Features - Tech Days 2010 IndiaArun Gupta
 
Introduction to Webpack - Ordina JWorks - CC JS & Web
Introduction to Webpack - Ordina JWorks - CC JS & WebIntroduction to Webpack - Ordina JWorks - CC JS & Web
Introduction to Webpack - Ordina JWorks - CC JS & WebJWORKS powered by Ordina
 
Java Persistence 2.0
Java Persistence 2.0Java Persistence 2.0
Java Persistence 2.0GFU Cyrus AG
 
Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2Fahad Golra
 
Lecture 6 Web Sockets
Lecture 6   Web SocketsLecture 6   Web Sockets
Lecture 6 Web SocketsFahad Golra
 
Jpa with spring data
Jpa with spring dataJpa with spring data
Jpa with spring dataSean Lee
 
Model with actors and implement with Akka
Model with actors and implement with AkkaModel with actors and implement with Akka
Model with actors and implement with AkkaNgoc Dao
 
Spring Data - Intro (Odessa Java TechTalks)
Spring Data - Intro (Odessa Java TechTalks)Spring Data - Intro (Odessa Java TechTalks)
Spring Data - Intro (Odessa Java TechTalks)Igor Anishchenko
 

Destaque (20)

JPQL/ JPA Activity 1
JPQL/ JPA Activity 1JPQL/ JPA Activity 1
JPQL/ JPA Activity 1
 
My sql explain & select
My sql explain & selectMy sql explain & select
My sql explain & select
 
Working with jpa
Working with jpaWorking with jpa
Working with jpa
 
FinelyMe-JustFit Intro
FinelyMe-JustFit IntroFinelyMe-JustFit Intro
FinelyMe-JustFit Intro
 
Integration testing - A&BP CC
Integration testing - A&BP CCIntegration testing - A&BP CC
Integration testing - A&BP CC
 
JPQL/ JPA Activity 2
JPQL/ JPA Activity 2JPQL/ JPA Activity 2
JPQL/ JPA Activity 2
 
JPQL/ JPA Activity 3
JPQL/ JPA  Activity 3JPQL/ JPA  Activity 3
JPQL/ JPA Activity 3
 
Taming NoSQL with Spring Data
Taming NoSQL with Spring DataTaming NoSQL with Spring Data
Taming NoSQL with Spring Data
 
Spring Data Neo4j Intro SpringOne 2011
Spring Data Neo4j Intro SpringOne 2011Spring Data Neo4j Intro SpringOne 2011
Spring Data Neo4j Intro SpringOne 2011
 
Git rerere
Git rerereGit rerere
Git rerere
 
Using the latest Java Persistence API 2 Features - Tech Days 2010 India
Using the latest Java Persistence API 2 Features - Tech Days 2010 IndiaUsing the latest Java Persistence API 2 Features - Tech Days 2010 India
Using the latest Java Persistence API 2 Features - Tech Days 2010 India
 
Introduction to Webpack - Ordina JWorks - CC JS & Web
Introduction to Webpack - Ordina JWorks - CC JS & WebIntroduction to Webpack - Ordina JWorks - CC JS & Web
Introduction to Webpack - Ordina JWorks - CC JS & Web
 
Java Persistence 2.0
Java Persistence 2.0Java Persistence 2.0
Java Persistence 2.0
 
Programming 4 kids
Programming 4 kidsProgramming 4 kids
Programming 4 kids
 
Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2Lecture 9 - Java Persistence, JPA 2
Lecture 9 - Java Persistence, JPA 2
 
Lecture 6 Web Sockets
Lecture 6   Web SocketsLecture 6   Web Sockets
Lecture 6 Web Sockets
 
Kick Start Jpa
Kick Start JpaKick Start Jpa
Kick Start Jpa
 
Jpa with spring data
Jpa with spring dataJpa with spring data
Jpa with spring data
 
Model with actors and implement with Akka
Model with actors and implement with AkkaModel with actors and implement with Akka
Model with actors and implement with Akka
 
Spring Data - Intro (Odessa Java TechTalks)
Spring Data - Intro (Odessa Java TechTalks)Spring Data - Intro (Odessa Java TechTalks)
Spring Data - Intro (Odessa Java TechTalks)
 

Semelhante a Persistência com JPA e Hibernate

Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaDaniel Faria Gomes
 
Teste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStrykerTeste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStrykerWashington Botelho
 
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014David Robert Camargo de Campos
 
Curso de Ruby on Rails - Aula 04
Curso de Ruby on Rails - Aula 04Curso de Ruby on Rails - Aula 04
Curso de Ruby on Rails - Aula 04Maurício Linhares
 
Atividades e Intenções (Android)
Atividades e Intenções (Android)Atividades e Intenções (Android)
Atividades e Intenções (Android)Natanael Fonseca
 
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-androidAlberto Souza
 

Semelhante a Persistência com JPA e Hibernate (20)

Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em Java
 
Hibernate conceitos
Hibernate conceitosHibernate conceitos
Hibernate conceitos
 
Teste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStrykerTeste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStryker
 
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
 
VRaptor4
VRaptor4VRaptor4
VRaptor4
 
JADE+JENA
JADE+JENAJADE+JENA
JADE+JENA
 
JQuery
JQuery JQuery
JQuery
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Curso de Ruby on Rails - Aula 04
Curso de Ruby on Rails - Aula 04Curso de Ruby on Rails - Aula 04
Curso de Ruby on Rails - Aula 04
 
MondoDB
MondoDBMondoDB
MondoDB
 
Sistema php
Sistema phpSistema php
Sistema php
 
Atividades e Intenções (Android)
Atividades e Intenções (Android)Atividades e Intenções (Android)
Atividades e Intenções (Android)
 
Realtime com node.js e socket.io
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
 
Course Hibernate 2008
Course Hibernate 2008Course Hibernate 2008
Course Hibernate 2008
 
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
Refactoring
RefactoringRefactoring
Refactoring
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-android
 

Último

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 

Último (9)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Persistência com JPA e Hibernate

  • 1. Persistência com JPA2 e Hibernate Fernando Oliveira
  • 2. O que é persistência?
  • 3. Modelo Relacional CREATE TABLE user( id int not null primary key, name varchar(255) not null ); CREATE TABLE post ( id int not null primary key, title varchar(255) not null, content text not null, author_id int not null, FOREIGN KEY (author_id) REFERENCES user(id) ); Modelo Orientado a Objeto public class User { private Integer id; private String name; … } public class Post { private Integer id; private String title; private String content; private User author; … }
  • 5.
  • 6.
  • 9. Configuração O Hibernate deve ser configurado no arquivo src/META-INF/persistence.xml
  • 10. persistence.xml <?xml version="1.0" encoding="UTF-8" ?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="BESSAS_DB" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" /> <property name="hibernate.hbm2ddl.auto" value="create" /> <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> <property name="javax.persistence.jdbc.user" value="postgres" /> <property name="javax.persistence.jdbc.password" value="postgres" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/usuario" /> </properties> </persistence-unit> </persistence>
  • 12. @Entity Define que a classe representa uma entidade do banco de dados @Entity public class Usuario { . . . }
  • 13. @Table Permite definir algumas configurações para as entidades mapeadas como por exemplo o nome da tabela: @Entity @Table(name=“user”) public class Usuario { . . . }
  • 14. @Id Indica qual atributo da classe será mapeado como chave primária: @Entity @Table(name=“user”) public class Usuario { @Id private Integer id; . . }
  • 15. @GeneratedValue Usado junto com @Id para indicar que o id será gerado automaticamente: @Entity @Table(name=“user”) public class Usuario { @Id @GeneratedValue(generator = “id”, strategy = GenerationType.IDENTITY) private Integer id; }
  • 16. @Column Define configurações das colunas: @Entity @Table(name=“user”) public class Usuario { @Id @GeneratedValue(generator = “id”, strategy = GenerationType.IDENTITY) private Integer id; @column (length=255, nullable=false) private String nome; @column(nullable=false, length=11, unique=true) private String cpf; }
  • 17. @Transient Informa que a propriedade não deve ser persistida: @Entity @Table(name=“user”) public class Usuario { @Id @GeneratedValue(generator = “id”, strategy = GenerationType.IDENTITY) private Integer id; @column (length=255, nullable=false) private String nome; @column(nullable=false, length=11, unique=true) private String cpf; @Transient private String retornoTratado; }
  • 19. Obtendo um entityManager public Usuario save (Usuario usuario) { EntityManagerFactory factory = Persistence.createEntityManagerFactory(“BESSAS_DB”); EntityManager manager = factory.createEntityManager(); . . . }
  • 20. Transação É uma sequência de operações num SGBD que são tratadas como um bloco único e indivisível
  • 21. Sincronização com o Banco de Dados É a propagação das remoções, alterações e inserções para o banco de dados. Ocorre quando chamamos o método commit de uma transação. Podemos usar o método flush para fazer uma sincronização sem finalizar a transação.
  • 22. Ciclo de vida das Entidades
  • 23. Persistindo public void saveOrUpdate (Usuario usuario) { EntityManagerFactory factory = Persistence.createEntityManagerFactory(“BESSAS_DB”); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin(); try { manager.persist(usuario); manager.getTransaction().commit(); } catch (Exception e) { manager.getTransaction().rollback(); } finally { manager.close(); } factory.close(); }
  • 24. Buscar objeto public Usuario buscar (Integer id) { EntityManagerFactory factory = Persistence.createEntityManagerFactory(“BESSAS_DB”); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin(); Usuario usuario = new Usuario(); try { Usuario usuario = manager.find(Usuario.class, id) manager.getTransaction().commit(); } catch (Exception e) { manager.getTransaction().rollback(); } finally { manager.close(); } factory.close(); return usuario; }
  • 25. Remover objeto public Usuario remover (Usuario) { EntityManagerFactory factory = Persistence.createEntityManagerFactory(“BESSAS_DB”); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin(); try { Usuario usuario = manager.remove(usuario); manager.getTransaction().commit(); } catch (Exception e) { manager.getTransaction().rollback(); } finally { manager.close(); } factory.close(); }
  • 26. Listando objetos public List<Usuario> lista () { EntityManagerFactory factory = Persistence.createEntityManagerFactory(“BESSAS_DB”); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin(); List<Usuario> usuarios = new ArrayList<Usuario>(); try { Query query = manager.createQuery("SELECT u FROM Usuario u"); usuarios = query.getResultList(); manager.getTransaction().commit(); } catch (Exception e) { manager.getTransaction().rollback(); } finally { manager.close(); } factory.close(); }
  • 27. Vamos melhorar o nosso projeto Open Session in View
  • 28. Classe JPAFilter public class JPAFilter implements Filter { private EntityManagerFactory factory; @Override public void init(FilterConfig arg0) throws ServletException { this.factory = Persistence.createEntityManagerFactory("BESSAS_DB"); } @Override public void destroy() { this.factory.close(); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // Implementação aqui... } }
  • 29. Implementação do método doFilter @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { EntityManager entityManager = this.factory.createEntityManager(); request.setAttribute("EntityManager", entityManager); entityManager.getTransaction().begin(); chain.doFilter(request, response); try { entityManager.getTransaction().commit(); } catch (Exception e) { entityManager.getTransaction().rollback(); } finally { entityManager.close(); } }
  • 30. Adicionando o método getEntity a classe Usuario private EntityManager getEntityManager () { HttpServletRequest request = ServletActionContext.getRequest(); EntityManager manager = (EntityManager) request.getAttribute("EntityManager"); return manager; }
  • 31. Recebendo o entityManager no nosso dao private EntityManager manager; public UsuarioDAO (EntityManager manager) { this.manager = manager; }
  • 32. Refatorando os métodos do DAO public void saveOrUpdate (Usuario usuario) { this.manager.persist(usuario); } public Usuario buscar(Integer id) { return this.manager.find(Usuario.class, 1); } public void remove(Usuario usuario) { manager.remove(usuario); } public List<Usuario> lista () { Query query = manager.createQuery("SELECT u FROM Usuario u"); return query.getResultList(); }
  • 33. No controller @Override public String execute() throws Exception { EntityManager manager = this.getEntityManager(); UsuarioDAO dao = new UsuarioDAO(manager); dao.adiciona(this.usuario); return AdicionaUsuarioAction.SUCCESS; }
  • 35. @OneToOne @JoinColumn ( name =" gov_id ") O Padrão seria “governador_id”
  • 37. @ManyToOne @JoinColumn ( name =” cli_id ") O Padrão seria “cliente_id”
  • 38. @ManyToMany @JoinTable ( name =" Liv_Aut ", joinColumns = @JoinColumn ( name =" Liv_ID "), inverseJoinColumns = @JoinColumn ( name =" Aut_ID ")) private Collection <Autor > autores ; O Padrão seria “livro_autor”
  • 39. Lazy e Eager @Basic(fetch=FetchType.LAZY) @ManyToOne ( fetch = FetchType . LAZY ) Define que a propriedade não deve ser trazida do banco no mesmo momento em que o Objeto. @Basic(fetch=FetchType.EAGER) @OneToOne ( fetch = FetchType . EAGER) Define que a propriedade deve ser trazida do banco no mesmo momento em que o Objeto.
  • 40. Herança Single Table @Inheritance(strategy=InheritanceType.SINGLE_TABLE) Joined @Inheritance ( strategy = InheritanceType . JOINED ) Table Per Class @Inheritance ( strategy = InheritanceType . TABLE_PER_CLASS )
  • 41. Herança @Entity public class Pessoa { @Id @GeneratedValue private Long id; private String nome ; // GETTERS E SETTERS } Suponha que tenhamos as classes abaixo: @Entity public class PessoaJuridica extends Pessoa { private String cnpj ; // GETTERS E SETTERS } @Entity public class PessoaFisica extends Pessoa { private String cpf ; // GETTERS E SETTERS }
  • 43. Herança Joined @Inheritance ( strategy = InheritanceType . JOINED )
  • 44. Herança Table Per Class @Inheritance ( strategy = InheritanceType . TABLE_PER_CLASS )
  • 45. JPQL Java Persistence Query Language Query query = manager . createQuery ( “SELECT u FROM Usuario”);
  • 46. JPQL Paginação query . setFirstResult (10) ; query . setMaxResults (20) ;
  • 48. GERANDO O BANCO DE DADOS
  • 49. GERANDO AS TABELAS <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.hbm2ddl.auto" value=”create" />
  • 51. Estude inglês desde cedo. Fluência necessita tempo e prática.
  • 52. Independente da linha que você seguir (técnica, teórica, acadêmica). O importante é você não ser simplesmente bom, mas o melhor naquilo que você faz. Busque excelência técnica...
  • 53. Fique atento para oportunidades, mesmo que não sejam exatamente o que você esperava. Pense nos resultados a longo prazo.
  • 54. Não tenha medo de errar. Na vida você aprende mais com os erros do que com os acertos.
  • 55. Thanks a lot! Fernando Oliveira nandooliveira.al@gmail.com Skype: nandooliveira3