Mapeamento Objeto-Relacional Mapeamento objeto
Transcrição
Mapeamento Objeto-Relacional Mapeamento objeto
Mapeamento Objeto-Relacional Persistência de dados com Java Persistence API - Hibernate Jefferson S Silva Mapeamento objeto-relacional • Mas como? – SQL + JDBC !? 1 Para quê serve MOR? • O uso de uma solução de mapeamento objetorelacional pode solucionar problemas do tipo: – Como devem ser as classes persistentes? – Como mapear hierarquias e relações? – Como recuperar os dados de associações de forma eficiente ? – Como gerenciar os recursos necessários: transações, cache, concorrência ? Porquê usar MOR? • Além da padronização da persistência.....!? • Produtividade – Elimina “90%” do código SQL da aplicação – Reduz o custo de tratamento de transações, erros, entre outros. • Manutenibilidade – Menos linhas de código == melhor manutenção – Redução drástica do impacto de mudanças na base de dados • Desempenho – Os recursos da solução de MOR (cache, lazy) podem melhorar o desempenho das buscas – Sobra tempo para a equipe trabalhar em otimizações do sistema 2 Mapeamento objeto-relacional com Java Persistente API - JPA O que é JPA • A JPA é uma especificações da linguagem Java para a persistência de dados. • Atua na camada de persistência de dados. • Define o mapeamento objeto-relacional com base em anotações 3 Visão geral • Existem algumas implementações – Toplink – Hibernate – GlassFish • Todos implementam a solução ORM de acordo com a especificação JPA • Têm o formato de arquivos *.jar que adicionados ao classPath da aplicação tornam-se disponíveis A implementação Hibernate • Mais conhecida, mais tradicional. • Endereço para Download. – http://www.hibernate.org • Os arquivos necessários. – Na pagina de downloads 4 Utilizando a JPA • Passos para a utilização – Download e instalação; – Criação das classes persistentes; – Definição do MOR; – Configuração da JPA; – Criação das tabelas no SGBD; – Usar a API de manipulação dos dados. Utilizando a JPA • Os arquivos *.jar devem ser referenciados no Build Path da aplicação • Com a IDE eclipse fica fácil. – Projeto > Propriedades > Java Build Path > Libraries > add JARs... 5 Bibliotecas necessárias • • • • • • • • • • • • • antLr asm asm-attrs c3p0 cglib commons-collection commons-logging dom4j ehcache jaxem jdbc2_0-stdext jta log4j Bibliotecas necessárias As mais importantes • hibernate3 • ejb3-persistence • hibernate-annotations • Hibernate-entitymanager 6 Agora deixando de conversa !!!! JPA Annotations – Propriedades 7 JPA Annotations – Propriedades • Quer que uma entidade seja persistente? – Anote a classe (POJO) com @Entity JPA Annotations – Propriedades • Quer que uma propriedade seja persistida? – O nome da propriedade corresponde ao nome de campo que a representa na tabela? Então não anote, ela será persistida automaticamente. 8 JPA Annotations – Propriedades • Não quer que uma propriedade seja persistida? – Anote a propriedade com @transient JPA Annotations – Propriedades • A propriedade não tem o mesmo nome da coluna no banco? – Anote a propriedade com @Column 9 JPA Annotations – Propriedades • Quer que a propriedade seja o identificador do objeto? – Anote a propriedade com @Id JPA Annotations – Propriedades • Quer definir a estratégia de geração de Ids? – basta utilizar a anotação @GeneratedValue e definir a estratégia. 10 JPA Annotations – Propriedades • E a entidade? Tem o mesmo nome da tabela em que será armazenada? – Se não, defina a tabela com a anotação @Table JPA Annotations – Propriedades • Anotações para propriedades do tipo de dados simples – @Transciente: Não será persistida no banco – @Basic: define tipo numéricos, booleanos, Strings, etc. – @Temporal: define datas e horas – @Lob: define textos ou binários grandes • Default : @Basic 11 JPA Annotations – Relacionamentos JPA Annotations – Relacionamentos • A entidade possui uma propriedade composta cujo tipo é uma outra entidade? – Use a anotação @OneToOne em uma propriedade do tipo correspondente. 12 JPA Annotations – Relacionamentos • Entendendo o OneToOne Pessoa Ramal JPA Annotations – Relacionamentos • A entidade faz parte de uma coleção de entidades de outras entidade? – Use a anotação @ManyToOne para uma propriedade que representará a entidade dona da coleção. Ramal 13 JPA Annotations – Relacionamentos • A entidade possui uma coleção de outras entidades? – Use a anotação @OneToMany para uma propriedade que representará a coleção Pessoa JPA Annotations – Relacionamentos • Relacionamento bidirecional Um-para-muitos 14 JPA Annotations – Relacionamentos • Duas entidades possuem coleções umas das outras? – Então ambas entidades terão propriedades de coleção com a anotação @ManyToMany JPA Annotations – Relacionamentos • Entendendo o ManyToMany 15 CascadeType.PERSIST • Em uma operação de persistência, a entidade possuidora é persistida em conjunto com a entidade que a completa, não sendo necessária a operação de persistência manual da outra entidade! CascadeType.MERGE • A sincronização no banco de dados é realizada automaticamente para as entidades que completam uma entidade principal. 16 CascadeType.REMOVE • Remoção em cascata • A entidade E2 associada a entidade E1, também será removida! CascadeType.REFRESH • Parecido com MERGE • Atualiza a instância do objeto a partir do Banco de Dados • As entidades relacionadas também serão atualizadas 17 JPA Annotations – Configurações JPA Annotations – Configurações • Algumas possibilidades diferentes – Hibernate.cfg.xml – Persistence.xml – Hibernate.properties 18 JPA Annotations – Configurações • Descrição das unidades de persistência. – – – – – – – – Provedor de persistência Dialeto usado para manipulação Driver usado para acessar o banco de dados Usuário do banco de dados Senha do banco de dados Url do banco de dados As entidades que farão parte do contexto. Varias outras configuração como: • Configuração do pool de conexões • Controle sobre as ações do hibernate sobre o banco • Etc...... JPA Annotations – Configurações • O mais interessante! – Definir vários contextos diferentes de acordo com as necessidades e identificá-los pelo nome 19 JPA Annotations – Configurações JPA Annotations – Configurações • Dialect: É uma classe que faz o cruzamento das funções do hibernate com as funções do banco de dados. Por exemplo, no Hibernate não temos a função Ltrim, mas utilizando o dialect para o Oracle este já estará disponível para utilização. Possiveis valores: • • • • • • • • • • DB2 - org.hibernate.dialect.DB2Dialect HypersonicSQL - org.hibernate.dialect.HSQLDialect Informix - org.hibernate.dialect.InformixDialect Ingres - org.hibernate.dialect.IngresDialect Interbase - org.hibernate.dialect.InterbaseDialect Pointbase - org.hibernate.dialect.PointbaseDialect PostgreSQL - org.hibernate.dialect.PostgreSQLDialect Mckoi SQL - org.hibernate.dialect.MckoiDialect Microsoft SQL Server - org.hibernate.dialect.SQLServerDialect MySQL - org.hibernate.dialect.MySQLDialect 20 JPA Annotations – Configurações • hbm2ddl.auto: Esta propriedade indica ao hibernate que ele deverá atualizar o schema do banco de dados ao inicializar a aplicação, ou seja, atualizar tabelas, indices, entre outros com seus arquivos de mapeamento. Por exemplo, se no arquivo de mapeamento tiver um campo e no banco de dados não tiver, ele fará um ALTER TABLE para adicionar este campo. Os possiveis valores são: create - apenas cria as tabelas e indices, se já tiverem sido criados não faz nada create-drop - apaga o schema e o recria. update - faz sincronismo entre XML de mapeamento e banco de dados. • show_sql: Esta propriedade indica ao hibernate se deverá ou não logar todos os comandos SQL. Os possiveis valores são: true ou false. Manuseando os objetos 21 Entendendo o ciclo de vida dos objetos Estados do ciclo de vida • Objetos transiente – Obtidos através da keyword “new”. – Objetos simples do Java, ainda não passados para o hibernate. – Não podem ter associações com objetos persistentes(persistência transitiva) – Não possuem representação no banco. – Não possuem identidade 22 Estados do ciclo de vida • Objetos persistentes – Possuem representação no banco de dados, inclusive identidade. – Objetos recuperados do banco pelo Hibernate diretamente ou por transitividade; – Estão sempre associados a um objeto Session ou EntityManager. Estados do ciclo de vida • Objetos destacados (Detached) – Objetos que foram persistentes ou transientes mas que não estão mais associados a um contexto persistente; – Quando uma session fecha, os objetos ainda “abertos” tornam-se destacados; – Não há garantias de que esses objetos serão sincronizados. – Eles podem ser re-associados através do metodo save(), update() ou save-update(); 23 Estados do ciclo de vida • Objetos persistentes = Objetos transacionais – Um objeto associados a uma session participa de uma transação e seu estado é atualizados ao final desta(Ou em sincronizações). – Se dynamic-update = true o Hibernate atualiza somente as propriedades alteradas, se false, atualiza todo objeto, mas somente os que foram alterados; – Os objetos são gerenciados dinamicamente pelo proxy do Hibernate. Isso quer dizer, que objetos persistentes são espelhos do banco de dados mantidos em cache pelo Hibernate. E não uma ligação direta com ele. O gerenciador de objetos EntityManager • O que ele provê: – Operações CRUD básicas; – Execução de consultas; – Controle de transações; – Gerencia de cache; 24 JPA – estratégias de recuperação de objetos • Recuperação preguiçosa ( Lazy): Sob demanda; • Recuperação adiantada (eager): uso de outer joins; Mãos a obra 25 Estrutura • Estrutura do projeto Adicionando os arquivos *.jar da implementação Hibernate 26 Adicionando os jars • A fonte – – – – Fazer o donwload ( http://www.hibernate.org/6.html ) Descompactar os arquivos Copiar os arquivos *.jar para a aplicação Adiciona ao Build Path Adicionando os jars • Para adicionar ao build path: projeto > propriedades > libraries > add JARs... 27 Mapeando as propriedades Mapeando os objetos - Ramal • Mapeando a Entidade Ramal 28 Mapeando os objetos - Ramal • Mapeando o identificador da entidade Mapeando os objetos - Ramal • Mapeando a propriedade da entidade Ou 29 Mapeando os objetos - Pessoa Mapeando os objetos - Usuario 30 Mapeando os objetos herança Pessoa-Usuario • Entidade Pessoa • Entidade Usuario Mapeando os relacionamentos 31 Mapeando as coleções: uma pessoa para muitos ramais • Entidade Pessoa • Entidade Ramal Mapeando as coleções: uma pessoa para muitos ramais • Lembrando do banco. 32 Mapeando as coleções: Muitas pessoa para muitos ramais • Entidade Pessoa • Entidade Ramal Mapeando as coleções: Muitas pessoa para muitos ramais • Lembrando do banco 33 Mapeando as coleções: Muitas pessoa para muitos ramais • Identificar posição das chaves Entidade que se está mapeando 34
Documentos relacionados
Mapeamento Lógico/Relacional com JPA
! Integração com diversos frameworks (não pode ser usado isoladamente)
Leia maisArtigo EspWeb 2013 - Aurélio Junior
projeto e por se tratar de um projeto “pessoal”, King utilizava seu tempo livre para que pudesse resolver problemas identificados pelos usuários do Hibernate. Com um escopo muito vasto, o projeto t...
Leia maismapeamento objeto relacional com hibernate em
em relação ao mapeamento das tabelas no banco de dados, o qual facilita grandemente o trabalho do desenvolvedor. Com a grande competitividade no mercado de software atual, o desenvolvimento de apli...
Leia mais