Upload
giovani-decusati
View
24
Download
0
Embed Size (px)
Citation preview
ORM e Hibernate
Conceitos
ORM
O problema!Grafo de objetos versus modelo relacional de tabelas
Acesso aos dados é fundamentalmente diferenteDiferença de granularidadeBanco de dados não possui herança
ORM
AlternativasManual utilizando acesso direto ao banco (mapeamento programático)Banco de dados orientado a objetos / OODBMS / Non-SQLSerializaçãoPersistê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 desenvolvimentoManutenção
Minimiza os efeitos de mudanças entre as alterações dos objetos e o modelo relacional
PerformanceCaching, lazy, tratamento de gargalos de banco de dados
IndependênciaMaior facilidade para desenvolvimento de aplicação independentes de banco de dados.
ORM
ORM
Base de dados
MapeamentosModelo
de objetos
HibernateCriado em nov/2001
Gavin KingRed Hat / Jboss
SuporteLicenciado sobre LGPLHibernate 3, dez/2004JPA / JSR-220
Hibernate
NHibernateNHibernate é uma implementação da especificação Hibernate da plataforma JavaPrimeira versão em 2005Versão 2.0 em agosto/2008 sobre o Hibernate 3Construído e suportado pela comunidadehttp://community.jboss.org/wiki/NHibernateUsersFAQhttp://nhforge.org/
Hibernate
SessionFactoryCache de mapeamentos e configuraçõesPara um banco de dadosFábrica de sessões para a aplicaçãoSingleton / Multi-threadedObjeto de longa duraçãoPode manter um nível de cache (second-level cache)
Compartilhamento entre sessões/transações diferentes
Hibernate
SessionSingle-threadObjeto de curto duraçãoEncapsula uma conexão de bancoFábrica de transaçõesPossui uma cache obrigatória (first-level cache)
Hibernate
Hibernate
Detached
Persistent
Transientnew()
get()load()find()etc...
save()saveOrUpdate() delete()
evict()close()clear()
update()saveOrUpdate()lock()
garbage
garbage
O problema do select N+1Um primeiro select retorna elementos com uma lista associada.
Para cada elemento, será necessário outro selectProblema clássico de performance em Java
Lazy loadingHQL / CriteriaMapeamento
Hibernate
Processo de desenvolvimento com Hibernate4 métodosDiferente abordagens para as situações
Hibernate
Middle-out Novo desenvolvimentoProjeto de modelo de classesMapeamento do modeloImplementação dos objetosExportação dos objetos para modelo relacional
Hibernate
Bottom-up Base de dados existentesMapeamento do modelo relacional para objetos
Possibilidade de uso de ferramentas (Hibernate Tools)
Implementação de regras sobre o modelo
Hibernate
Top-downCódigo já existenteImplementação de modelo de objetosMapeamento dos objetosExportação dos objetos para modelo relacional
Hibernate
Meet in the middleMigração de acesso direto para ORMCriação de mapeamento entre os objetos existentes e a base de dados
Hibernate
Hibernate TipsNão usar tipos primitivosSalve na hierarquia
Use o simples!Cascade
Equals / HashCodeLazy loadingCriteria
Example
Hibernate
Hibernate TipsMany-to-many reais são raros
Prefira dois one-to-manyAtenção com Session flushing
FetchModeNamedQueriesCacheNão setar atributos diretamente na criação
Hibernate cria objetos
Hibernate
NHibernate Tipshttp://nhforge.org/wikishttp://nhforge.org/doc/nh/en/index.htmlDocumentação do Hibernate (Java)http://nhprof.com/Override
public override bool Equals(object obj)public override int GetHashCode()
Hibernate