Você está na página 1de 27

Danilo Braga Lus Theodoro

Hibernate
Persistncia automtica e transparente de objetos de um aplicativo Java para tabelas em um banco de dados relacional, utilizando metadados que descrevem o mapeamento entre os objetos e o banco de dados. Em essncia, transforma dados de uma representao para a outra. Hibernate in Action

Hibernate: Mdulos

Hibernate Core
Contm os servios bsicos
Metadados escritos em XML

Consultas
HQL: Hibernate Query Language Interfaces utilizando critrios e exemplos

Hibernate: Mdulos

Hibernate Core
No depende de outros mdulos
No depende de uma verso especfica do

JDK
Executvel em qualquer servidor Web e/ou de Aplicao e tambm em aplicaes desktop

Mdulos

Hibernate Annotations
Permite a escrita de metadados atravs de
Annotations Beneficia-se da tipagem do Java Compatvel com refatoraes de cdigo Semntica familiar para quem j est acostumado com metadados em XML

Mdulos

Hibernate Annotations
Utiliza as Annotations da especificao JPA
Possui Annotations prprias para

configuraes avanadas no presentes na


especificao Necessita do JDK 5.0

Mdulos

Hibernate Entity Manager


Implementao da especificao JPA
Permite a escrita de cdigo compatvel com

qualquer framework de persistncia que


implemente a especificao

Mdulos

Hibernate Entity Manager


Utiliza o pacote javax.persistence

No disponibiliza todas as funcionalidades do


Hibernate

Metadados

Utilizados para especificar o mapeamento

entre
Classes e tabelas Propriedades e colunas Associaes e chaves estrangeiras Tipos de atributos Java e tipos de atributos SQL

Metadados

Pode ser escrita de duas formas


Arquivos XML
Xdoclet

Java Annotations

XML
<hibernate-mapping> <class name=entidade.Empresa" table=empresa"> <id name="id" column="id"> <generator class="increment" /> </id> <!-- Propriedades da classe --> <property name="nome" column=nome"/> <one-to-one name = endereco" class = entidade.Endereco /> <set name =programadores> <key column = programadores_id/> <one-to-many class=entidade.Programador> </set> </class> </hibernate-mapping>

Porque no usar XML

Torna o cdigo pouco legvel e de difcil edio


Requer maior digitao Falta de valores default para atributos e elementos

No mais flexvel e nem mais fcil de manter do que cdigo Java Mais fcil encontrar um bom editor Java do que um bom editor de XML

Xdoclet
/** * @hibernate.class table="TB_GLB_ISP_PROD_COMPCA RAC_XREF" */ public class CotaCaracteristicaComponente extends BusinessObject { private CotaCaracteristicaComponentePK id; private String cota; /** * @hibernate.id } public void setCota(String cota) { this.cota = cota; } } } /** * @hibernate.property column="VALOR_TXT" */ public String getCota() { return cota; } public void setId(CotaCaracteristicaComponenteP K id) { this.id = id;

*/
public CotaCaracteristicaComponentePK getId() { return id;

Por que no usar Xdoclet


No possuem construes default Necessrio sempre fazer referncia a

todas os atributos da classe

Dificulta o legibilidade do cdigo

Metadados com Annotations

A meta-informao fica perto dos dados que ela descreve Compatvel com refatorao de cdigo
Renomear, deletar e remover classes e propriedades

Sem necessidade de fazer parser em XML


Inicializao mais rpida

Lido atravs de reflection na inicializao do Hibernate Disponvel a partir da JDK 5.0

Mapeando Propriedades
Ao mapear uma classe atravs da Annotation @Entity, todas as propriedades sero consideradas persistentes Propriedades no persistentes devem receber a Annotation @Transient ou o modificador transient Por default, o nome da coluna ser o mesmo da propriedade

@Column
Aplicvel para propriedades simples Atributos

name
Nome da coluna a qual o mtdo mapeado

unique
Se o valor deve ser nico ou no

nullable
Se a atributo pode ser nulo ou no

Mapeando Propriedades: Tipos

Datas
Propriedades podem ser do tipo java.util.Date ou java.util.Calendar Preciso default TIMESTAMP Preciso pode ser alterada atravs da Annotation @Temporal

@Temporal(TemporalType.DATE) private Date date1; @Temporal(TemporalType.TIME) private Date date2; @Temporal(TemporalType.TIMESTAMP) private Date date3;

Adicionando um Identificador
O valor gerado automaticamente pelo Hibernate No deve ser mudado pela aplicao

@Entity @Table(name="CATEGORY") public class Category { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "CATEGORY_ID") private Long id; public Long getId() { return id; } }

Associao entre Entidades

Podem ser de diversas multiplicidades


@OneToOne @OneToMany @ManyToOne @ManyToMany

Tambm so implementadas atravs de atributos Para associaes one-to-many e many-tomany necessrio a utilizao de colees

Associao entre Entidades

Podem ser de diversas multiplicidades

@OneToOne @OneToMany @ManyToOne


@ManyToMany

Tambm so implementadas atravs de atributos Para associaes one-to-many e many-to-many necessrio a utilizao de colees

One to one

Modelo de relacionamento
Um para um
Classe Professor

Classes
Professor Disciplina

Classe Disciplina

One to many

Modelo de relacionamento
Um para muitos
Classe Aluno
Opcional

Classes
Disciplina
Aluno
Classe Disciplina

Projeto

Projeto - Descrio

Criar as classes de entidade de acordo com o modelo


Programador

Empresa
Endereo

Inserir os annotations para o mapeamento

Projeto - Descrio

Implementar os mtodos das classes DAO


Salvar()
Alterar() Excluir()

Listar()
getEntidade()

Usar como base


ExemploDAO

Você também pode gostar