Академический Документы
Профессиональный Документы
Культура Документы
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
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
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
Hibernate e a JPA
Session: representa uma conversao, invlucro para conexo fabrica de transaes Transaction: Uma transao
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.
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>
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;
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
http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html
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();
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
Adicionando o driver SGBD ao projeto Hibernate configuration file (cfg.xml) Hibernate console configuration A perspectiva Hibernate
Engenharia reversa
Tabelas pr-existentes podem ser automaticamente convertidas e mapeadas em classes
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