SlideShare a Scribd company logo
1 of 22
ORM e Hibernate
Conceitos
ORM
O problema!
Grafo de objetos versus modelo relacional de tabelas
Acesso aos dados é fundamentalmente diferente
Diferença de granularidade
Banco de dados não possui herança
ORM
Alternativas
Manual utilizando acesso direto ao banco (mapeamento
programático)
Banco de dados orientado a objetos / OODBMS / Non-SQL
Serialização
Persistência utilizando mapeamento objeto relacional
ORM
O que é persistência?
Armazenar dados em um RDBMS utilizando SQL.
O que é Hibernate?
Framework de mapeamento objeto relacional (ORM).
O que é ORM?
Transformar dados de uma representação para outra.
Persistência automatizada (transparente) de objetos no banco de
dados.
ORM
ORM
Níveis de ORM
Simples
Complexo
Porque ORM?
Produtividade
Reduz o tempo de desenvolvimento
Manutenção
Minimiza os efeitos de mudanças entre as alterações dos
objetos e o modelo relacional
Performance
Caching, lazy, tratamento de gargalos de banco de dados
Independência
Maior facilidade para desenvolvimento de aplicação
independentes de banco de dados.
ORM
ORM
Base de
dados
Mapeamentos
Modelo
de
objetos
Hibernate
Criado em nov/2001
Gavin King
Red Hat / Jboss
Suporte
Licenciado sobre LGPL
Hibernate 3, dez/2004
JPA / JSR-220
Hibernate
NHibernate
NHibernate é uma implementação da especificação Hibernate da
plataforma Java
Primeira versão em 2005
Versão 2.0 em agosto/2008 sobre o Hibernate 3
Construído e suportado pela comunidade
http://community.jboss.org/wiki/NHibernateUsersFAQ
http://nhforge.org/
Hibernate
SessionFactory
Cache de mapeamentos e configurações
Para um banco de dados
Fábrica de sessões para a aplicação
Singleton / Multi-threaded
Objeto de longa duração
Pode manter um nível de cache (second-level cache)
Compartilhamento entre sessões/transações diferentes
Hibernate
Session
Single-thread
Objeto de curto duração
Encapsula uma conexão de banco
Fábrica de transações
Possui uma cache obrigatória (first-level cache)
Hibernate
Hibernate
Detached
Persistent
Transient
new()
get()
load()
find()
etc...
save()
saveOrUpdate() delete()
evict()
close()
clear()
update()
saveOrUpdate()
lock()
garbage
garbage
O problema do select N+1
Um primeiro select retorna elementos com uma lista
associada.
Para cada elemento, será necessário outro select
Problema clássico de performance em Java
Lazy loading
HQL / Criteria
Mapeamento
Hibernate
Processo de desenvolvimento com Hibernate
4 métodos
Diferente abordagens para as situações
Hibernate
Middle-out
Novo desenvolvimento
Projeto de modelo de classes
Mapeamento do modelo
Implementação dos objetos
Exportação dos objetos para modelo relacional
Hibernate
Bottom-up
Base de dados existentes
Mapeamento do modelo relacional para objetos
Possibilidade de uso de ferramentas (Hibernate Tools)
Implementação de regras sobre o modelo
Hibernate
Top-down
Código já existente
Implementação de modelo de objetos
Mapeamento dos objetos
Exportação dos objetos para modelo relacional
Hibernate
Meet in the middle
Migração de acesso direto para ORM
Criação de mapeamento entre os objetos existentes e a base
de dados
Hibernate
Hibernate Tips
Não usar tipos primitivos
Salve na hierarquia
Use o simples!
Cascade
Equals / HashCode
Lazy loading
Criteria
Example
Hibernate
Hibernate Tips
Many-to-many reais são raros
Prefira dois one-to-many
Atenção com Session flushing
FetchMode
NamedQueries
Cache
Não setar atributos diretamente na criação
Hibernate cria objetos
Hibernate
NHibernate Tips
http://nhforge.org/wikis
http://nhforge.org/doc/nh/en/index.html
Documentação do Hibernate (Java)
http://nhprof.com/
Override
public override bool Equals(object obj)
public override int GetHashCode()
Hibernate

More Related Content

Similar to ORM e Hibernate conceitos

Bancos de Dados Orientados a Objeto
Bancos de Dados Orientados a ObjetoBancos de Dados Orientados a Objeto
Bancos de Dados Orientados a Objetoelliando dias
 
Mapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORMMapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORMFábio Rehm
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)Helder da Rocha
 
Bancos de Dados Orientados a Objetos
Bancos de Dados Orientados a ObjetosBancos de Dados Orientados a Objetos
Bancos de Dados Orientados a ObjetosGlaucio Scheibel
 
Banco de dados orientados a objetos
Banco de dados orientados a objetos Banco de dados orientados a objetos
Banco de dados orientados a objetos Raquel Machado
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com HibernateDanilo Braga
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com HibernateDanilo Braga
 
Apresentação: Padrões de Projetos para Persistência de Dados
Apresentação: Padrões de Projetos para Persistência de DadosApresentação: Padrões de Projetos para Persistência de Dados
Apresentação: Padrões de Projetos para Persistência de DadosLuan Lima
 
Modelo orientado a objetos
Modelo orientado a objetosModelo orientado a objetos
Modelo orientado a objetosDaiana de Ávila
 
Semana acadêmica UFRGS 2014
Semana acadêmica UFRGS 2014Semana acadêmica UFRGS 2014
Semana acadêmica UFRGS 2014Daniela Macedo
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webRafael Nunes
 
Curso De Hibernate 3
Curso De Hibernate 3Curso De Hibernate 3
Curso De Hibernate 3Joel Lobo
 

Similar to ORM e Hibernate conceitos (20)

Bancos de Dados Orientados a Objeto
Bancos de Dados Orientados a ObjetoBancos de Dados Orientados a Objeto
Bancos de Dados Orientados a Objeto
 
Mapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORMMapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORM
 
Apresentação mapeamento objeto relacional
Apresentação mapeamento objeto relacionalApresentação mapeamento objeto relacional
Apresentação mapeamento objeto relacional
 
MAC5855 - NoSQL
MAC5855 - NoSQLMAC5855 - NoSQL
MAC5855 - NoSQL
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Bancos de Dados Orientados a Objetos
Bancos de Dados Orientados a ObjetosBancos de Dados Orientados a Objetos
Bancos de Dados Orientados a Objetos
 
Banco de dados orientados a objetos
Banco de dados orientados a objetos Banco de dados orientados a objetos
Banco de dados orientados a objetos
 
Material Seminário NoSQL
Material Seminário NoSQLMaterial Seminário NoSQL
Material Seminário NoSQL
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com Hibernate
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com Hibernate
 
Apresentação: Padrões de Projetos para Persistência de Dados
Apresentação: Padrões de Projetos para Persistência de DadosApresentação: Padrões de Projetos para Persistência de Dados
Apresentação: Padrões de Projetos para Persistência de Dados
 
Modelo orientado a objetos
Modelo orientado a objetosModelo orientado a objetos
Modelo orientado a objetos
 
Semana acadêmica UFRGS 2014
Semana acadêmica UFRGS 2014Semana acadêmica UFRGS 2014
Semana acadêmica UFRGS 2014
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Hibernate
HibernateHibernate
Hibernate
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações web
 
Curso De Hibernate 3
Curso De Hibernate 3Curso De Hibernate 3
Curso De Hibernate 3
 
Mapeamento objeto relacional
Mapeamento objeto relacionalMapeamento objeto relacional
Mapeamento objeto relacional
 
Hibernate conceitos
Hibernate conceitosHibernate conceitos
Hibernate conceitos
 
Introdução ao banco de dados
Introdução ao banco de dadosIntrodução ao banco de dados
Introdução ao banco de dados
 

ORM e Hibernate conceitos