22
ORM e Hibernate Conceitos

Hibernate

Embed Size (px)

Citation preview

Page 1: Hibernate

ORM e Hibernate

Conceitos

Page 2: Hibernate

ORM

Page 3: Hibernate

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

Page 4: Hibernate

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

Page 5: Hibernate

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

Page 6: Hibernate

ORM

Níveis de ORM Simples

Complexo

Page 7: Hibernate

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

Page 8: Hibernate

ORM

Base de dados

MapeamentosModelo

de objetos

Page 9: Hibernate

HibernateCriado em nov/2001

Gavin KingRed Hat / Jboss

SuporteLicenciado sobre LGPLHibernate 3, dez/2004JPA / JSR-220

Hibernate

Page 10: 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

Page 11: 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

Page 12: Hibernate

SessionSingle-threadObjeto de curto duraçãoEncapsula uma conexão de bancoFábrica de transaçõesPossui uma cache obrigatória (first-level cache)

Hibernate

Page 13: Hibernate

Hibernate

Detached

Persistent

Transientnew()

get()load()find()etc...

save()saveOrUpdate() delete()

evict()close()clear()

update()saveOrUpdate()lock()

garbage

garbage

Page 14: Hibernate

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

Page 15: Hibernate

Processo de desenvolvimento com Hibernate4 métodosDiferente abordagens para as situações

Hibernate

Page 16: Hibernate

Middle-out Novo desenvolvimentoProjeto de modelo de classesMapeamento do modeloImplementação dos objetosExportação dos objetos para modelo relacional

Hibernate

Page 17: 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

Page 18: Hibernate

Top-downCódigo já existenteImplementação de modelo de objetosMapeamento dos objetosExportação dos objetos para modelo relacional

Hibernate

Page 19: Hibernate

Meet in the middleMigração de acesso direto para ORMCriação de mapeamento entre os objetos existentes e a base de dados

Hibernate

Page 20: Hibernate

Hibernate TipsNão usar tipos primitivosSalve na hierarquia

Use o simples!Cascade

Equals / HashCodeLazy loadingCriteria

Example

Hibernate

Page 21: 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

Page 22: 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