Upload
rodrigojardim
View
231
Download
0
Embed Size (px)
Citation preview
8/9/2019 Persist en CIA de Objetos Com Hibernate
1/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Persistncia fcil de objetos com
Hibernate Persistncia de Objetos
O que ?
Por que mapeamento O/R?
Dificuldades Tradicionais do mapeamento O/R
Utilizando o Hibernate para o mapeamento O/R
Projetando a hierarquia de objetos e esquecendo o banco de dados
Persistindo seus objetos de dados
Persistindo objetos simples
Persistindo colees
Boas prticas
Abstraindo a sua camada de persistncia de dados
Consulta a dados
8/9/2019 Persist en CIA de Objetos Com Hibernate
2/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
O que persistir um objeto?
Uma aplicao java composta de objetos
So utilizados objetos tambm para
representar os dados
Para que estes dados continuem existido
entre diferentes execues da aplicao
estes objetos de dados precisam serdurveis
Navegar na arvore de objetos mais fcil do
que fazer uma consulta SQL na maioria das
vezes
8/9/2019 Persist en CIA de Objetos Com Hibernate
3/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Por que mapeamento OR?
A maneira padro de armazenar dados em todas
as empresas no mundo um banco de dados
Relacional
Os bancos de dados orientados a objetos no
esto to desenvolvidos quanto os bancos de
dados relacionais
Muitos aplicativos desenvolvidos em linguagensorientadas a objetos precisam se comunicar com
aplicativos j existentes, e interagir com os dados
destes aplicativos uma maneira bastante
funcional para isto
8/9/2019 Persist en CIA de Objetos Com Hibernate
4/23http://www.rsjug.orghttp://www.usiinformatica.com.br
Dificuldades tradicionais no
mapeamento O/R O modelo de representao dos dados em
um banco relacional no compatvel com a
representao direta de uma hierarquia deobjetos
Os tipos de dados utilizados em uma
linguagem orientada a objetos no so os
mesmos existentes em um banco de dados
necessrio transformar os objetos para
tabelas e as tabelas para objetos novamente
8/9/2019 Persist en CIA de Objetos Com Hibernate
5/23http://www.rsjug.orghttp://www.usiinformatica.com.br
Utilizando o Hibernate para o
mapeamento O/R O Hibernate uma tima soluo open
source para mapeamento Objeto Relacional,
alm de ser a soluo mais utilizada hoje emdia.
Ele trs uma grande Flexibilidade e poder
para a aplicao, contando com a linguagem
de consulta HQL e aceitando, em suas
ltimas verses, a utilizao de SQL
mesclado a esta linguagem de consultas
8/9/2019 Persist en CIA de Objetos Com Hibernate
6/23http://www.rsjug.orghttp://www.usiinformatica.com.br
Esquecendo o banco de dados
Um sistema orientado a objetos, funciona de maneira
muito melhor, quando todo o sistema orientado a
objetos, inclundo os dados do sistema.
mesmo o conceito de Value Objects violando 90% das
leis da orientao a objetos, continua muito mais fcil o
lgico de trabalhar do que consultas isoladas ao banco
de dados trasendo conjuntos de dados sem uma
informao completa.
Isolando os dados em um modelo de objetos, facilita o
processo de alterao no schema do banco de dados,
j que o resto da aplicao no precisa ficar sabendo
que este ocorreu.
8/9/2019 Persist en CIA de Objetos Com Hibernate
7/23http://www.rsjug.orghttp://www.usiinformatica.com.br
Persistindo Objetos Simples
Qualquer objeto persistido
utilizando o Hibernate, precisa
de um arquivo de
mapeamento para o modelo
relacional.
Todas as classes do pacote
java.lang so equivalentes
aos tipos de dados primitivos
do banco de dados.
Todo objeto persistido pelo
hibernate, precisa de uma
propriedade de identificao,
como a chave primaria do
banco de dados.
8/9/2019 Persist en CIA de Objetos Com Hibernate
8/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Um ID para um Objeto?
um ID ou chave primaria, no
tem relao nenhuma com a
Orientao a objetos, mas
uma imposio do modelo
relacional, onde os dadossero armazenados.
por este motivo, todo o tipo de
dados persistido como uma
entidade Objeto/Relacional,
precisa prover esta
identificao para possibilitar
o mapeamento para o banco
de dados
Tipos de
Identificao:
assigned/fornecida
Gerada
native - dependente do
banco de dados
increment
sequence
hilo
seqhilo
uuid.hex
uuid.string
foreign
8/9/2019 Persist en CIA de Objetos Com Hibernate
9/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Tipos de dados padro
O Hibernate implementa
mapeamento padro para
todos os tipos de dados
primitivos do java, todas as
classes Wraper e as
classes:
java.sql.Date
java.sql.Time java.sql.Timestamp
java.util.Date
java.util.Calendar
Todas as classes
configuradas como
persistentes tambm podem
ser utilizadas como um tipo
de dados, em qualquerpropriedade, isto se torna o
equivalente a uma chave
estrangeira em um banco de
dados.
os Tipos Collection tambm
so funcionais de fabrica,
mas discutiremos isto depois.
e qualquer tipo serializvel
pode ser transformado em umblob.
8/9/2019 Persist en CIA de Objetos Com Hibernate
10/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Tipos de dados personalizados
Alm dos tipos de dados includos de fbrica, as vezes precisamos de um tipo
composto, ou complexo, estes podem vir em quatro sabores:
Component - um objeto relacionado que salvo na mesma tabela,
transferindo para o banco de dados o conceito de composio.
Enumerao - pode ser definido um tipo de dados que aceita apenas uma
pequena quantidade de inteiros como valor, e os mapeia para um nome,
para isto basta definir uma classe que extende
net.sf.hibernate.PersistentEnum como tipo do campo.
Tipo costumizado podem ser definidos ou redefinidos quaisquer tipo de
mapeamento de tipos de dados, para isto, basta sobre escrever as classes:
net.sf.hibernate.UserType
ou net.sf.hibernate.CompositeUserType
Any Type uma propriedade equivalente a Object, que aceita qualquer
entidade como valor.
8/9/2019 Persist en CIA de Objetos Com Hibernate
11/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Herana e persistncia
Como uma boa engine de mapeamento O/R o hibernate
trs suporte para herana e polimorfismo para consultas e
persistncia dos dados.
para que uma classe suporte polimorfismo no seumapeamento deve ser utilizado o elemento: desta maneira o
hibernate pode identificar novamente o tipo de dados
daquela linha quando for ler novamente o objeto ali
armazenado.
Durante uma consulta ou armazenamento de dados no
entanto, o polimorfismo automtico, sem a necessidade
de nenhuma sintaxe especial.
8/9/2019 Persist en CIA de Objetos Com Hibernate
12/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Persistindo colees
O Hibernate prove tambm suporte a
persistncia de colees, para relaes one-
to-many e many-to-many.
Arrays tambm so suportados, e so a
nica opo para a persistncia de colees
primitivas.
Como cada tipo de coleo tem suas
caractersticas, e o Java no da suporte a
colees tipadas ainda, discutiremos a
seguir o mapeamento de colees do
8/9/2019 Persist en CIA de Objetos Com Hibernate
13/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Persistindo um array
Arrays de tipos Objeto ou
primitivo so suportados
pelo hibernate.
Como no java, arrays sotimos para armazenar
quantidades no muito
grandes de dados, com
tamanho mais ou menosfixo e de uma maneira
posicional.
8/9/2019 Persist en CIA de Objetos Com Hibernate
14/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Persistindo um List
O contrato da
interface
java.util.List, diz que
uma lista, uma
coleo de objetos
que podem se
repetir e ficamarmazenados de
maneira posicional.
8/9/2019 Persist en CIA de Objetos Com Hibernate
15/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Persistindo um Set
O contrato da
interface java.util.Set
especifica que esta
coleo no contem
itens repetidos, isto
bastante til em
uma grandequantidade de
situaes.
8/9/2019 Persist en CIA de Objetos Com Hibernate
16/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Persistindo um BAG
O Collection framework do
java, no tem uma interface
Bag, mas a idia desta
coleo bem parecida
com um List.
O Bag uma lista que
pode conter elementos
repetidos, mas diferente de
uma List ela no mantem aordem dos itens, tendo a
vantagem de poder ser
ordenada a vontade na
hora de uma consulta.
8/9/2019 Persist en CIA de Objetos Com Hibernate
17/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Persistindo um Map
Muitas vezes, til salvar
uma coleo de objetos na
forma de um java.util.Map,
desta forma podendo
recuperar o valor destes
objetos pelo valor da chave
associada a ele.
Existem implementaes
que permitem uma chaveduplicada, mas o hibernate
s suporta chaves nicas
em um Map.
8/9/2019 Persist en CIA de Objetos Com Hibernate
18/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Relacionamento Bi-Direcional
Todas as colees de objetos tem as opes de serem
salvas em uma tabela a parte, ou no caso de um
relacionamento one-to-many serem salvas como um
campo no objeto de destino, com a exceo de umarray, que s salvo em uma tabela separada.
Este tipo de relacionamento til principalmente
quando o objeto de destino tem a necessidade de
acessar o seu Dono, como por exemplo as contasde uma agencia bancaria.
8/9/2019 Persist en CIA de Objetos Com Hibernate
19/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
HQL Hibernate Query Language
Para poder recuperar os dados utilizando o Hibernate, temos
disponvel a HQL.
Esta linguagem sendo um subset da OQL padronizada pela
ODMG, misturada com recursos teis do SQL, misturando omelhor dos dois mundos.
Na ltima verso do hibernate, possvel executar uma consulta
SQL diretamente.
O Hibernate tambm trs uma interface para consultar orientada
a objetos, chamada de Criteria API, esta mesmo sendo um
casamento com o Hibernate, trs diversas vantagens e
facilidades para o desenvolvimento.
8/9/2019 Persist en CIA de Objetos Com Hibernate
20/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Abstraindo sua camada de
persistncia Contrariando as regras da orientao a objetos, mas seguindo as boas
prticas de desenvolvimento, mesmo utilizando o Hibernate como
soluo de mapeamento O/R, recomendvel a criao de um Layer
de persistncia em sua aplicao.
Esta camada tambm conhecida como Objetos de Acesso a Dados, ouDAOs, alm de encapsular a utilizao do Hibernate, permite tambm, a
utilizao mesclada do hibernate com JDBC puro, ou ento, facilita a
troca da soluo de persistncia, quando esta for necessria, como por
exemplo, do Hibernate para o Prevayler ou para Entity Beans, ou at
mesmo para apenas JDBC.
Estes objetos normalmente implementam as operaes conhecidas
como CRUD (Create, Retrieve, Update and Delete) normalmente
oferecendo mais de um mtodo de retrieve, ou consultas por exemplo
(QBE), isto , a passagem de um ou dois objetos do tipo a ser
consultado, com as propriedades a serem utilizadas na consulta j
preenchidas.
8/9/2019 Persist en CIA de Objetos Com Hibernate
21/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
8/9/2019 Persist en CIA de Objetos Com Hibernate
22/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Site do Hibernate: http://www.hibernate.org
Artigo sobre Persistncia de objetos:
http://www.research.ibm.com/journal/sj/361/srinivasan.html
Boas prticas no mapeamento Objeto Relacional:
http://www.agiledata.org/essays/mappingObjects.html
Tutorial sobre a utilizao do Spring com Hibernate, Xdoclet
e Middlegen: http://www.warfrog.com/hibernatetutorial/
http://www.hibernate.org/http://www.research.ibm.com/journal/sj/361/srinivasan.htmlhttp://www.agiledata.org/essays/mappingObjects.htmlhttp://www.warfrog.com/hibernatetutorial/http://www.warfrog.com/hibernatetutorial/http://www.warfrog.com/hibernatetutorial/http://www.agiledata.org/essays/mappingObjects.htmlhttp://www.agiledata.org/essays/mappingObjects.htmlhttp://www.research.ibm.com/journal/sj/361/srinivasan.htmlhttp://www.research.ibm.com/journal/sj/361/srinivasan.htmlhttp://www.hibernate.org/http://www.hibernate.org/8/9/2019 Persist en CIA de Objetos Com Hibernate
23/23
http://www.rsjug.orghttp://www.usiinformatica.com.br
Rodrigo Urubatan Ferreira JardimConsultor/Desenvolvedor J2EE
Sun Certified Web Component Developer for J2EE 1.4Sun Certified Programmer for the Java 2 Platform 1.4
http://www.usiinformatica.com.br
mailto:[email protected]://www.usiinformatica.com.br/http://www.usiinformatica.com.br/http://www.usiinformatica.com.br/mailto:[email protected]:[email protected]