You are on page 1of 34

Mapeamento Objeto-Relacional

Persistncia de dados com Java Persistence API - Hibernate

Jefferson S Silva

Mapeamento objeto-relacional

Mas como?
SQL + JDBC !?

Para qu serve MOR?


O uso de uma soluo de mapeamento objetorelacional pode solucionar problemas do tipo:
Como devem ser as classes persistentes? Como mapear hierarquias e relaes? Como recuperar os dados de associaes de forma eficiente ? Como gerenciar os recursos necessrios: transaes, cache, concorrncia ?

Porqu usar MOR?


Alm da padronizao da persistncia.....!? Produtividade
Elimina 90% do cdigo SQL da aplicao Reduz o custo de tratamento de transaes, erros, entre outros.

Manutenibilidade
Menos linhas de cdigo == melhor manuteno Reduo drstica do impacto de mudanas na base de dados

Desempenho
Os recursos da soluo de MOR (cache, lazy) podem melhorar o desempenho das buscas Sobra tempo para a equipe trabalhar em otimizaes do sistema

Mapeamento objeto-relacional com Java Persistente API - JPA

O que JPA
A JPA uma especificaes da linguagem Java para a persistncia de dados. Atua na camada de persistncia de dados. Define o mapeamento objeto-relacional com base em anotaes

Viso geral
Existem algumas implementaes
Toplink Hibernate GlassFish

Todos implementam a soluo ORM de acordo com a especificao JPA Tm o formato de arquivos *.jar que adicionados ao classPath da aplicao tornam-se disponveis

A implementao Hibernate
Mais conhecida, mais tradicional. Endereo para Download.
http://www.hibernate.org

Os arquivos necessrios.
Na pagina de downloads

Utilizando a JPA
Passos para a utilizao
Download e instalao; Criao das classes persistentes; Definio do MOR; Configurao da JPA; Criao das tabelas no SGBD; Usar a API de manipulao dos dados.

Utilizando a JPA
Os arquivos *.jar devem ser referenciados no Build Path da aplicao Com a IDE eclipse fica fcil.
Projeto > Propriedades > Java Build Path > Libraries > add JARs...

Bibliotecas necessrias
antLr asm asm-attrs c3p0 cglib commons-collection commons-logging dom4j ehcache jaxem jdbc2_0-stdext jta log4j

Bibliotecas necessrias
As mais importantes hibernate3 ejb3-persistence hibernate-annotations Hibernate-entitymanager

Agora deixando de conversa !!!!

JPA Annotations Propriedades

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? Ento no anote, ela ser persistida automaticamente.

JPA Annotations Propriedades


No quer que uma propriedade seja persistida?
Anote a propriedade com @transient

JPA Annotations Propriedades


A propriedade no tem o mesmo nome da coluna no banco?
Anote a propriedade com @Column

JPA Annotations Propriedades


Quer que a propriedade seja o identificador do objeto?
Anote a propriedade com @Id

JPA Annotations Propriedades


Quer definir a estratgia de gerao de Ids?
basta utilizar a anotao @GeneratedValue e definir a estratgia.

10

JPA Annotations Propriedades


E a entidade? Tem o mesmo nome da tabela em que ser armazenada?
Se no, defina a tabela com a anotao @Table

JPA Annotations Propriedades


Anotaes para propriedades do tipo de dados simples
@Transciente: No ser persistida no banco @Basic: define tipo numricos, booleanos, Strings, etc. @Temporal: define datas e horas @Lob: define textos ou binrios grandes

Default : @Basic

11

JPA Annotations Relacionamentos

JPA Annotations Relacionamentos


A entidade possui uma propriedade composta cujo tipo uma outra entidade?
Use a anotao @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 coleo de entidades de outras entidade?
Use a anotao @ManyToOne para uma propriedade que representar a entidade dona da coleo.
Ramal

13

JPA Annotations Relacionamentos


A entidade possui uma coleo de outras entidades?
Use a anotao @OneToMany para uma propriedade que representar a coleo
Pessoa

JPA Annotations Relacionamentos


Relacionamento bidirecional Um-para-muitos

14

JPA Annotations Relacionamentos


Duas entidades possuem colees umas das outras?
Ento ambas entidades tero propriedades de coleo com a anotao @ManyToMany

JPA Annotations Relacionamentos


Entendendo o ManyToMany

15

CascadeType.PERSIST
Em uma operao de persistncia, a entidade possuidora persistida em conjunto com a entidade que a completa, no sendo necessria a operao de persistncia manual da outra entidade!

CascadeType.MERGE
A sincronizao no banco de dados realizada automaticamente para as entidades que completam uma entidade principal.

16

CascadeType.REMOVE
Remoo em cascata A entidade E2 associada a entidade E1, tambm ser removida!

CascadeType.REFRESH
Parecido com MERGE Atualiza a instncia do objeto a partir do Banco de Dados As entidades relacionadas tambm sero atualizadas

17

JPA Annotations Configuraes

JPA Annotations Configuraes


Algumas possibilidades diferentes
Hibernate.cfg.xml Persistence.xml Hibernate.properties

18

JPA Annotations Configuraes


Descrio das unidades de persistncia.
Provedor de persistncia Dialeto usado para manipulao Driver usado para acessar o banco de dados Usurio do banco de dados Senha do banco de dados Url do banco de dados As entidades que faro parte do contexto. Varias outras configurao como:
Configurao do pool de conexes Controle sobre as aes do hibernate sobre o banco Etc......

JPA Annotations Configuraes


O mais interessante!
Definir vrios contextos diferentes de acordo com as necessidades e identific-los pelo nome

19

JPA Annotations Configuraes

JPA Annotations Configuraes


Dialect: uma classe que faz o cruzamento das funes do hibernate com as funes do banco de dados. Por exemplo, no Hibernate no temos a funo Ltrim, mas utilizando o dialect para o Oracle este j estar disponvel para utilizao. 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 Configuraes


hbm2ddl.auto: Esta propriedade indica ao hibernate que ele dever atualizar o schema do banco de dados ao inicializar a aplicao, 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 no tiver, ele far um ALTER TABLE para adicionar este campo. Os possiveis valores so:
create - apenas cria as tabelas e indices, se j tiverem sido criados no 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 no logar todos os comandos SQL. Os possiveis valores so: true ou false.

Manuseando os objetos

21

Entendendo o ciclo de vida dos objetos

Estados do ciclo de vida


Objetos transiente
Obtidos atravs da keyword new. Objetos simples do Java, ainda no passados para o hibernate. No podem ter associaes com objetos persistentes(persistncia transitiva) No possuem representao no banco. No possuem identidade

22

Estados do ciclo de vida


Objetos persistentes
Possuem representao no banco de dados, inclusive identidade. Objetos recuperados do banco pelo Hibernate diretamente ou por transitividade; Esto sempre associados a um objeto Session ou EntityManager.

Estados do ciclo de vida


Objetos destacados (Detached)
Objetos que foram persistentes ou transientes mas que no esto mais associados a um contexto persistente; Quando uma session fecha, os objetos ainda abertos tornam-se destacados; No h garantias de que esses objetos sero sincronizados. Eles podem ser re-associados atravs 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 transao e seu estado atualizados ao final desta(Ou em sincronizaes). Se dynamic-update = true o Hibernate atualiza somente as propriedades alteradas, se false, atualiza todo objeto, mas somente os que foram alterados; Os objetos so gerenciados dinamicamente pelo proxy do Hibernate. Isso quer dizer, que objetos persistentes so espelhos do banco de dados mantidos em cache pelo Hibernate. E no uma ligao direta com ele.

O gerenciador de objetos EntityManager


O que ele prov:
Operaes CRUD bsicas; Execuo de consultas; Controle de transaes; Gerencia de cache;

24

JPA estratgias de recuperao de objetos


Recuperao preguiosa ( Lazy): Sob demanda; Recuperao adiantada (eager): uso de outer joins;

Mos a obra

25

Estrutura
Estrutura do projeto

Adicionando os arquivos *.jar da implementao 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 aplicao 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 herana Pessoa-Usuario


Entidade Pessoa

Entidade Usuario

Mapeando os relacionamentos

31

Mapeando as colees: uma pessoa para muitos ramais


Entidade Pessoa

Entidade Ramal

Mapeando as colees: uma pessoa para muitos ramais


Lembrando do banco.

32

Mapeando as colees: Muitas pessoa para muitos ramais


Entidade Pessoa

Entidade Ramal

Mapeando as colees: Muitas pessoa para muitos ramais


Lembrando do banco

33

Mapeando as colees: Muitas pessoa para muitos ramais


Identificar posio das chaves
Entidade que se est mapeando

34

You might also like