Persist en CIA de Objetos Com Hibernate

download Persist en CIA de Objetos Com Hibernate

of 23

Transcript of Persist en CIA de Objetos Com Hibernate

  • 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

    [email protected]

    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]