Вы находитесь на странице: 1из 25

Hibernate 3.

Objetivos
Palestra de Nvel Bsico

1- Conceitos 2-Hibernate e a JPA 3- Instalao/Configurao 5-Como funciona 4-Associaes 5-Consultas 6-Hibernate Tools

Prof. Flavio Augusto Coutinho Correia

Conceitos: O que Hibernate?


Hibernate um framework que prov persistncia objeto/relacional e servios de consulta Persistncia = Um objeto poder voltar a existir mesmo depois de eliminado da memria do computador Pode ser utilizado em pequenas aplicaes stand alone ou grandes sistemas corporativos Open Source Licensa LGPL Idealizou uma nova maneira de persistncia de objetos para o EJB 3.0 e a JPA

Prof. Flavio Augusto Coutinho Correia

Conceitos: O que Hibernate?

Um descritor XML (Cliente.hbm.xml ) ou @nnotations, definem quais propriedades de uma classe correspondem aos campos de uma tabela Um objeto do tipo Session associado uma configurao de conexo a um SGBD efetua todo o trabalho de salvamento e recuperao de informaes
Prof. Flavio Augusto Coutinho Correia

Conceitos:O que Hibernate?


No necessrio escrever comandos SQL No necessrio utilizar EJBs e DAOs Efetua o mapeamento de relacionamentos de tabelas para associaes em classes HQL permite efetuar consultas complexas Mapeamento O/R pode funcionar em diversos SDBDs Fornece controle de transaes

Prof. Flavio Augusto Coutinho Correia

Conceitos: O que Hibernate?


Runtime do Hibernate
Para execuo do Hibernate, os seguintes arquivos .jar(*) devem ficar disponveis para busca pela aplicao (classpath)
antlr-2.7.6.jar commons-collections-3.1.jar dom4j-1.6.1.jar ejb3-persistence-3.4.0.jar Hibernate-annotations-3.4.0.jar Hibernate-commons-annotations-3.4.0.jar Hibernate-core-3.4.GA.jar javassist-3.4.GA.jar jta.jar log4j-1.2.15.jar slf4j-api-3.4.0.jar slf4j-log4j12-3.4.0.jar

Prof. Flavio Augusto Coutinho Correia

Hibernate e a JPA
JPA = JAVA PERSISTENCE API Persistncia com EJB 2.x era um inferno Na poca a proposta do Hibernate era bem mais simples, robusta e elegante A Sun gostou, e adicionou o conceito do hibernate a nova verso do EJB 2.X Foi criada a especificao JPA (JSR 3.17) Principais implementaes: Hibernate, Toplink, OpenJPA, Eclipselink A JPA tornou o EJB 3.0 um paraso

Prof. Flavio Augusto Coutinho Correia

Hibernate e a JPA

Session: representa uma conversao, invlucro para conexo fabrica de transaes Transaction: Uma transao

Prof. Flavio Augusto Coutinho Correia

Instalao

1-Copiar os jars para o classpath do projeto 2-A partir dai, basta criar os arquivos hibernate.cfg.xml, arquivos de mapeamento ( MinhaClasse.hbm.xml) e/ou anotar classes.

Prof. Flavio Augusto Coutinho Correia

Configurao
hibernate.cfg.xml
<hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="hibernate.connection.password"></property> <property name="hibernate.connection.url">jdbc:hsqldb:mem:foo</property> <property name="hibernate.connection.username">sa</property> <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property> <property name="hibernate.hbm2ddl.auto">update</property> <!-- put here your mappings --> <mapping resource="com/sicpa/tt007/common/model/ApplicationType.hbm.xml" /> <!-- ou use mapping classes para JPA @nnotations--> <mapping class="com.sicpa.tt007.common.model.ApplicationType"/> </hibernate-configuration>

Prof. Flavio Augusto Coutinho Correia

Como funciona (@nnotation)


@Entity @Table(name="aluno", schema="anotacoes") public class Aluno { @Id //Definio do mecanismo de definio da chave primria @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="id_aluno") private int id; private int matricula; private String nome; private long cpf; @ManyToOne(fetch = FetchType.EAGER ,cascade=CascadeType.PERSIST) @JoinColumn(name="id_curso",insertable=true, updatable=true) private Curso curso; //geters & setters }

Prof. Flavio Augusto Coutinho Correia

Como funciona (Sequence)


@Entity @Table(name="aluno", schema="anotacoes") @SequenceGenerator(name="f_id_seq", sequenceName = "aluno_id_seq") public class Aluno { @Id //Definio do mecanismo de definio da chave primria @GeneratedValue(generator="f_id_seq",strategy=GenerationType.AUTO) @Column(name="id_aluno") private int id; private int matricula; private String nome; private long cpf; @ManyToOne(fetch = FetchType.EAGER ,cascade=CascadeType.PERSIST) @JoinColumn(name="id_curso",insertable=true, updatable=true) private Curso curso; //geters & setters }
Prof. Flavio Augusto Coutinho Correia

Como funciona (Hibernate)


//SessionFactory deve ser criado uma nica vez durante a execuo da aplicao SessionFactory sf = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory(); Session session = sf.openSession(); //Abre sesso Transaction tx = session.beginTransaction(); //Cria transao //Cria objeto Aluno Aluno aluno = new Aluno(); aluno.setNome("Joo Victor"); aluno.setMatricula(2031998); aluno.setCpf(1234567898); //Considera-se que o objeto curso j havia gravado na base de dados e //recuperado para ser atribudo neste momento. aluno.setCurso(curso); session.save(aluno); //Realiza persistncia tx.commit(); //Fecha transao session.close(); //Fecha sesso
Prof. Flavio Augusto Coutinho Correia

Como funciona (JPA + EJB)


@Stateless public class AlunoService { //Injeta um entity manager de acordo com o contexto transacional @PersistenceContext(unitName = "main") private EntityManager entityManager; public void salvaAluno() { Curso curso = (Curso)entityManager.find(Curso.class, 1); //Cria objeto Aluno Aluno aluno = new Aluno(); aluno.setNome("Joo Victor"); aluno.setMatricula(2031998); aluno.setCpf(1234567898); aluno.setCurso(curso); entityManager.persist(aluno) }
Prof. Flavio Augusto Coutinho Correia

Associaes many-to-one
Aluno.hbm.xml
<many-to-one name="curso" class="modelo.Curso" column="ID_CURSO"/>

@nnotation em Aluno.java
@ManyToOne(fetch = FetchType.EAGER ,cascade=CascadeType.PERSIST) @JoinColumn(name="id_curso",insertable=true, updatable=true) private Curso curso;
Prof. Flavio Augusto Coutinho Correia

Associaes one-to-many
Curso.hbm.xml
<set name="alunos" cascade="save-update" inverse="true" lazy="true"> <key column="ID_CURSO" /> <one-to-many class="modelo.Aluno" /> </set>
*inverse=se true, diz para o hibernate que a classe aluno ser responsvel pela persistncia **inverse=bacalhau documentado, mantido por compatibilidade nas verses mais novas

@nnotation em Curso.java
@OneToMany(mappedBy=curso", fetch = FetchType.LAZY , cascade=CascadeType.ALL) private Collection <Aluno> alunos;
Prof. Flavio Augusto Coutinho Correia

Associaes many-to-many
Curso.hbm.xml
<set name="departamentos" table="DEPARTAMENTO_CURSO" cascade="save-update" > <key column="ID_CURSO" /> <many-to-many column="ID_DEPARTAMENTO" class="modelo.Departamento" /> </set>

Departamento.hbm.xml
<set name="cursos" table="DEPARTAMENTO_CURSO" inverse="true" cascade="saveupdate"> <key column="ID_DEPARTAMENTO" /> <many-to-many column="ID_CURSO" class="modelo.Curso" /> </set>
Prof. Flavio Augusto Coutinho Correia

Associaes many-to-many
@nnotation em Curso.java
@ManyToMany @JoinTable( name=DEPARTAMENTO", joinColumns=@JoinColumn(name=DEPARTAMENTO_ID", referencedColumnName="ID") public Collection <Departamento>departamentos;

@nnotation em Departamento.java
@ManyToMany(mappedBy=departamentos") public Collection<Curso>cursos;

Prof. Flavio Augusto Coutinho Correia

Associaes
Demais associaes
@nnotations @OneToOne HBM

<one-to-one name="universidade" class="modelo.Universidade" cascade="all" constrained="true" /> <one-to-one name="endereco" class="modelo.Endereco" cascade="all" /> <composite-id name="compositeID" class="modelo.DepartamentoCursoID" > <key-many-to-one name="curso" column="ID_CURSO" class="modelo.Curso" /> <key-many-to-one name="departamento" column="ID_DEPARTAMENTO" class="modelo.Departamento" /> </composite-id> <class name="modelo.Pessoa" table="PESSOA" discriminator-value="0" > ... <discriminator column="TIPO_PESSOA" type="int" /> <subclass name="modelo.Aluno" discriminator-value="1"> ... </subclass>

@EmbeddedId @Embeddable

@Inheritance(strategy=InheritanceType) @DiscriminatorColumn @DiscriminatorValue

http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html

Prof. Flavio Augusto Coutinho Correia

Consultas
Utiliza-se HQL ou Criteria API
Consulta por Curso
String hql = "from Curso c where c.nome like A%"; Query q = entityManager.createQuery(hql); q.list();

Consulta parametrizada
String hql = "from Curso c where c.departamento.id = ?"; Query q = entityManager.createQuery(hql); q.setParameter(1, 123); q.list();

Consulta paginada
String hql = "from Curso c where c.departamento.id = ?"; Query q = entityManager.createQuery(hql); q.setFirstResult(100); q.setMaxResults(50); q.list();

Consulta com Criteria API


Criteria criteria = entityManager.createCriteria(Aluno.class); criteria.add(Expression.eq("nome", "Maria"); criteria.add(Order.asc(matricula); criteria.list(); Prof. Flavio Augusto Coutinho Correia

Hibernate Tools

Hibernate Tools
http://www.hibernate.org/30.html Plugin que integra o Hibernate ao Eclipse, fornecendo uma perspectiva e assistentes visuais para mapeamento O/R e engenharia reversa

Prof. Flavio Augusto Coutinho Correia

Configurando o Hibernate Tools

Adicionando o driver SGBD ao projeto Hibernate configuration file (cfg.xml) Hibernate console configuration A perspectiva Hibernate

Prof. Flavio Augusto Coutinho Correia

Criando Classes e Mapeamentos

Engenharia reversa
Tabelas pr-existentes podem ser automaticamente convertidas e mapeadas em classes

Mapeamento de classes para tabelas


Classes podem ser mapeadas para tabelas

Prof. Flavio Augusto Coutinho Correia

Referncias

Site Oficial do Hibernate: www.hibernate.org Pagina da especificao JPA http://jcp.org/en/jsr/detail?id=317 Referncia sobre JPA annotations
http://www.oracle.com/technology/products/ias/toplink/jpa/resources/top link-jpa-annotations.html

Artigo sobre o Hibernate:


http://www.guj.com.br/content/articles/hibernate/intrudu cao_hibernate3_guj.pdf

Prof. Flavio Augusto Coutinho Correia

Thanks for your attention! facorreia@gmail.com


Prof. Flavio Augusto Coutinho Correia

Вам также может понравиться