Você está na página 1de 70

Hibernate

Mapeamento Objeto-Relacional

Baseado nas notas de aula de Joo Dalyson


e Raphaela Galhardo Fernandes

Prof. Anselmo Cardoso Paiva


Prof. Geraldo Braz Junior

Objetivos
Aprender MOR usando Hibernate
Configurar o Hibernate (XML, Anotaes)
Aprender a preparar consultas e comandos

de manipulao de objetos com o


Hibernate + BD;

Mapeamento Objeto
Relacional

Metadados descrevem o mapeamento entre os objetos e o

banco de dados

MOR: Mapeando atributos


Mapeamento simples;
Atributos de uma classe correspondem a colunas

de uma tabela;
Deve-se considerar:

Tipos de dados;
Comprimento mximo dos dados;
Preciso.

No obrigado um atributo de uma classe se

referir a uma coluna da tabela.

Exemplo MOR

MOR: Mapeamento de
relacionamentos
Tipos:
Um-para-um;
Um-para-muitos;
Muitos-para-um;
Muitos-para-muitos.

MOR: Opes
JDBC:
Ferramentas Existentes:

Hibernate;
JDO;
Ibatis;
Castor;
Torque;
EJB/CMP;
JPA (EJB 3.0)

Hibernate
Framework de mapeamento objeto

relacional para aplicaes Java;


Open Source;
Suporte:
Colees
Relacionamento entre objetos
Herana, polimorfismo e composies
Linguagem de consulta prpria
HQL Hibernate Query Language

Benefcios do MOR e do Hibernate


Produtividade
Permite que voc se concentre no problema

de negcio;
Manuteno
Menos linhas de cdigo (sistema mais
compreensvel)
Desempenho
Hibernate permite otimizaes
Independncia de fornecedor
Abstrai o aplicativo do sistema de banco de
dados
Portabilidade

Hibernate - Arquitetura

10

Hibernate - Arquitetura
Session:
Possibilita a comunicao entre a aplicao e

a persistncia;
Objetos leves (barata de criar e destruir);
De vida curta;
A partir dele possvel:
Realizar operaes CRUD:

11

(create, retrieve, update e delete)

Hibernate - Arquitetura
SessionFactory:
Possui informaes de um banco de dados;
Fbrica de objetos do tipo Session;
Objeto Pesado;
Uma nica instncia por aplicao;
Mltiplos bancos de dados (Uma SessionFactory
para cada)
Mantm o MOR em memria.

12

Hibernate - Arquitetura
Configuration:
Usado para configurar informaes para

inicializao do Hibernate;

Local documentos de mapeamentos


Propriedades especficas do hibernate

Usado para a obteno de um objeto

SessionFactory:

13

Hibernate - Arquitetura
Transaction (opcional):
Objeto de vida curta;
Usados para especificar unidades atmicas

de trabalho;
Abstrai o aplicativo de lidar diretamente com
transaes JDBC, JTA ou CORBA.

14

Hibernate - Arquitetura
Interfaces Criteria e Query
Query:
Executar consultas no banco de dados
Controlar como a consulta executada
Criteria:
Bem similar a Query
Permite executar e criar consultas com criterios
orientados para objetos

15

Classes Persistentes
Implementam as entidades de domnio do

negcio;
Associadas a uma tabela no banco de
dados;
Classes POJOs (Plain Old Java Objects):

Estrutura de JavaBeans
Construtor padro;
Mtodos getters e setters;
Com atributo identificador independente da lgica
de negcio.

16

Ciclo de Vida

17

Objetos Persistentes
Possuem uma identidade de banco de

dados;
Estado do objeto continua existindo aps a
destruio do seu processo;
Pode ser recriado em um novo objeto.

18

Objetos Transientes
Tempo de vida ligado ao tempo do processo

que o criou;
No necessariamente possuem estado
persistente;
No podem ser reconstitudos
automaticamente.

19

Objetos Detached
Objetos em estado intermedirio;
J Foram associados a um contexto

persistente;
Perderam o contexto

Fechamento ou finalizao de sesso.

20

Chave Primria
Uma chave candidata a ser primria uma

coluna ou conjunto delas que identificam


apenas uma linha;
Uma chave deve ser:
nica;
Sempre no nula;
Constante.
importante que a chave primria no tenha
significado de negcio.

21

Chave primria: mecanismos

22

Hibernate com Anotaes

23

O que so?

24

Primeiro Exemplo de
Persistncia
CREATE TABLE `aluno` (
`id_aluno` INT(10) NOT NULL
AUTO_INCREMENT,

`matricula` INT(10) NOT NULL,


`nome` VARCHAR(40) NOT NULL,
`cpf` BIGINT(20) NOT NULL,
PRIMARY KEY (`id_aluno`) )
COLLATE='utf8_general_ci'

ENGINE=InnoDB
ROW_FORMAT=DEFAULT
AUTO_INCREMENT= 0

25

Mapeamento com Anotaes


Pacotes:
javax.persistence.*
org.hibernate.annotations.*

26

Exemplo de mapeamento

27

1.

import javax.persistence.*;

2.
3.

@Entity
@Table(name="aluno", schema=exemplo")

4.
5.
6.
7.
8.

public class Aluno {


@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id_aluno")
private int id;

9.
10.
11.
12.
13.
14.
15.
16.

private int matricula;


private String nome;
private long cpf;
//Construtor padro
public Aluno(){}
//Mtodos getters e setters
//...
}

Anotaes
@Entity: informa que a classe mapeada

persistente
@Table: informa nome da tabela
correspondente.
name: nome da tabela;

schema: nome do esquema no banco de

dados onde est a tabela.


Necessrio apenas se nome da tabela
diferente do nome da classe e a tabela est
em esquema diferente de public.

28

Anotaes
@Id: define chave primria.
@GeneratedValue: define mecanismo de

gerao da chave primria.

strategy = GenerationType.IDENTITY

@Column:
name: define nome da coluna que mapeia

atributo.

29

Configurao
Necessrio criar um arquivo

hibernate.cfg.xml

Tambm necessrio as bibliotecas:


hibernate3.jar
hibernate-jpa-2.0-api-1.0.0.Final.jar (alternativas)
(E pasta required)
Alm do conector para mysql

30

hibernate.cfg.xml
1.
2.

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate
Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernateconfiguration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property
name="hibernate.connection.url">jdbc:mysql://localhost:3309/exemplo</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.pool_size">10</property>
<mapping class="exemplo.Aluno"/>
</session-factory>
</hibernate-configuration

31

Dialetos

32

Manipulando objetos

33

Manipulando Objetos

34

Cdigo gerado
1.
2.
3.

35

Hibernate: insert into exemplo.aluno


(matricula, nome, cpf)
values (?, ?, ?)

Metodos
Session

36

SaveOrUpdate

37

Delete

38

Segundo Exemplo: Cliente


CREATE TABLE `cliente` (
`id_cliente` INT(10) NOT NULL
AUTO_INCREMENT,
`cpf` BIGINT(20) NOT NULL DEFAULT '0',
`nome` VARCHAR(40) NOT NULL
DEFAULT '0',
`endereco` VARCHAR(100) NULL DEFAULT
'0',
`total_compras` DECIMAL(10,2) NULL
DEFAULT '0.00',
`data_cadastro` TIMESTAMP NULL
DEFAULT CURRENT_TIMESTAMP,
`data_nascimento` DATE NOT NULL,
PRIMARY KEY (`id_cliente`), UNIQUE
INDEX `u_cpf` (`cpf`)
)
39

Mapeamento Cliente

40

Mapeamento Cliente

41

Anotaes
@Transient: mapeia atributo no

persistente.
@Temporal: mapeamento de datas e
horas:
TemporalType.DATE: usado para mapear

datas;
TemporalType.TIME: usado para mapear
hora;
TemporalType.TIMESTAMP: usado para
mapear datas e hora.

42

Anotaes
@Column: definio de uma coluna:
name: nome da coluna;
unique: unicidade ou no;
nullable: coluna nula ou no;
length: tamanho da coluna;

precision: preciso;
insertable: atributo deve ser inserido ou no;
updatable: atributo deve ser atualizado ou

no.

43

Mapeamento de Associaes
One-to-One, One-to-Many, Many-to-One, Manyto-Many

44

Tipos
Um-para-um;
Muitos-para-um;
Um-para-muitos;
Muitos-para-muitos

45

OneToMany
Exemplo:
Uma universidade possui N centros
@OneToMany;

46

One-To-Many

47

OneToMany
@OneToMany:
mappedBy: atributo no relacionamento

muitos-para-um;
fetch: indica quando o contedo ser trazido
do banco de dados;
cascade: indica ao em cascata do
relacionamento:
CascadeType.PERSIST;
CascadeType.REMOVE;
CascadeType.REFRESH;
CascadeType.MERGE;
CascadeType.ALL;
48

OneToMany
@OneToMany:
fetch: (javax.persistence.FetchType)
FetchType.EAGER: sempre trazer;
FetchType.LAZY: trazer apenas quando

necessrio.

@OrderBy:
Ordena coleo
<atributo> ASC
<atributo> DESC

Exemplo: @OrderBy("nome ASC")

49

Exemplo
@Cascade(CascadeType.ALL)

50

Insere todos os centros!

ManyToOne
Exemplo:
Uma universidade possui N centros
@OneToMany;

51

Mapeando Centro

52

Associaes - ManyToOne
@ManyToOne
fetch:
FetchType.EAGER;
FetchType.LAZY.
cascade.

@JoinColumn: informa nome da coluna

chave estrangeira:

name = nome da coluna;


insertable = atributo deve ser inserido ou

no;
updatable = atributo deve ser atualizado ou
no.
53

Associaes - ManyToOne
@Fetch: define como o atributo deve ser

recuperado do banco de dados:

FetchMode.JOIN: utiliza outer join;


FetchMode.SELECT: utiliza novo select;
FetchMode.SUBSELECT: utiliza uma consulta

subselect. No permitido para @ManyToOne.

54

ManyToMany
Nova tabela entre o relacionamento;

55

Mapeamento Departamento

56

Mapeamento Departamento

57

Mapeamento Curso

58

Associaes - ManyToMany
@ManyToMany

fetch:
FetchType.EAGER;
FetchType.LAZY.
cascade.

59

Associaes - ManyToMany
@JoinTable: informa qual a tabela

intermediria:

name: nome da tabela;


schema: esquema em que se encontra;
joinColumns: qual coluna o representa na

tabela intermediria;
inverseJoinColumns: qual coluna representa
a outra entidade do relacionamento.

60

Exemplo

61

Associaes - ManyToMany
Nova tabela entre o relacionamento com

outros atributos;

62

Associaes ManyToMany
Classe extra para a chave composta:

63

Associaes - ManyToMany

64

Exemplo

65

OneToOne
Formas de Mapeamento:
@OneToOne.

66

Associaes OneToOne
Tabela endereco vai ter referncia para

universidade

67

Associaes OneToOne

68

Exemplo

69

Referncias
Raphaela Galhardo Fernandes, Gleydson de

A. Ferreira Lima:Hebernate com Anotaes


<http://wiki.futurepages.org/lib/exe/fetch.
php?media=quickstart:hibernate_anotacoe
s.pdf>

Hibernate:
http://sourceforge.net/projects/hibernate/file

s/hibernate3/
http://www.hibernate.org/docs
70

Você também pode gostar