21 de nov. de 2007

Curso Hibernate - Aula 03

Ainda hoje coloco um desafio para ser feito até na Segunda-Feira (26/11/07) Bibliotecas utilizadas: antlr-2.7.6 cglib-nodep-2.1_3.jar commons-beanutils.jar commons-collections.jar commons-dbcp.jar commons-logging.jar dom4j-1.6.1.jar ejb3-persistence.jar hibernate3.jar hibernate-annotations.jar hibernate-commons-annotations.jar jta.jar mysql-connector-java-5.0.7-bin.jar Fontes do hibernateQuerie: ROOT - lib   - libs - src   - hibernate.cfg.xml   - entidade     - Aluno.java     - Curso.java   - servico     - AlunoServico.java     - CursoServico.java   - util     - HibernateUtil.java hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

 <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/hibernateQuerie</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <property name="show_sql">true</property>
  <property name="format_sql">true</property>

        <property name="hbm2ddl.auto">update</property>

  <mapping class="entidade.Aluno"/>
  <mapping class="entidade.Biblioteca"/>
  <mapping class="entidade.Curso"/>
  <mapping class="entidade.Endereco"/>
  <mapping class="entidade.Livro"/>
  <mapping class="entidade.Telefone"/>

 </session-factory>

</hibernate-configuration>

Aluno.java
package entidade;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Aluno {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;

 private String nome;

 private Integer idade;

 @Temporal(TemporalType.DATE)
 private Date nascimento;

 @ManyToOne(fetch=FetchType.LAZY)
 @JoinColumn(name = "curso_id", referencedColumnName = "id")
 private Curso curso;

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getNome() {
  return nome;
 }

 public void setNome(String nome) {
  this.nome = nome;
 }

 public Curso getCurso() {
  return curso;
 }

 public void setCurso(Curso curso) {
  this.curso = curso;
 }

 public Integer getIdade() {
  return idade;
 }

 public void setIdade(Integer idade) {
  this.idade = idade;
 }

 public Date getNascimento() {
  return nascimento;
 }

 public void setNascimento(Date nascimento) {
  this.nascimento = nascimento;
 }

 @Override
 public String toString() {
  return "Aluno["+id+"]: "+ nome;
 }

}

Curso.java
package entidade;
import java.util.Collection;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity
public class Curso {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;

 private String descricao;

 private Integer duracao;

 @OneToMany(mappedBy = "curso")
 @Cascade(CascadeType.ALL)
 private Collection alunos;

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getDescricao() {
  return descricao;
 }

 public void setDescricao(String descricao) {
  this.descricao = descricao;
 }

 public Collection getAlunos() {
  return alunos;
 }

 public void setAlunos(Collection alunos) {
  this.alunos = alunos;
 }

 public Integer getDuracao() {
  return duracao;
 }

 public void setDuracao(Integer duracao) {
  this.duracao = duracao;
 }
 
 public String toString(){
  return "Curso["+id+"]: "+descricao;
 }

}

Biblioteca.java
package entidade;

import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity
@Table(name="biblioteca")
public class Biblioteca {
 
 @Id
 @GeneratedValue(strategy=GenerationType.AUTO) 
 private Integer id;
 
 @Column(name="nome", length=50)
 private String nome;
 
 @Column(name="cnpj", length=14)
 private String cnpj;
 
 @OneToOne(mappedBy="biblioteca")
 @Cascade(CascadeType.ALL)
 private Endereco endereco;
 
 @OneToMany(mappedBy="biblioteca")
 @Cascade(CascadeType.ALL)
 private Collection livros;

 @OneToMany(mappedBy="")
 @Cascade(CascadeType.ALL)
 private Collection telefone;
 
 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getNome() {
  return nome;
 }

 public void setNome(String nome) {
  this.nome = nome;
 }

 public String getCnpj() {
  return cnpj;
 }

 public void setCnpj(String cnpj) {
  this.cnpj = cnpj;
 }

 public Endereco getEndereco() {
  return endereco;
 }

 public void setEndereco(Endereco endereco) {
  this.endereco = endereco;
 }

 public Collection getLivros() {
  return livros;
 }

 public void setLivros(Collection livros) {
  this.livros = livros;
 }

 public Collection getTelefone() {
  return telefone;
 }

 public void setTelefone(Collection telefone) {
  this.telefone = telefone;
 }
}

Endereco.java
package entidade;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name="endereco")
public class Endereco {
 
 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 private Integer idEndereco;
 
 @Column(name="rua")
 private String rua;
 
 @Column(name="nro")
 private String nro;
 
 @OneToOne()
 @JoinColumn(name="biblioteca_id", referencedColumnName="id")
 private Biblioteca biblioteca;

 public Integer getIdEndereco() {
  return idEndereco;
 }

 public void setIdEndereco(Integer idEndereco) {
  this.idEndereco = idEndereco;
 }

 public String getRua() {
  return rua;
 }

 public void setRua(String rua) {
  this.rua = rua;
 }

 public String getNro() {
  return nro;
 }

 public void setNro(String nro) {
  this.nro = nro;
 }

 public Biblioteca getBiblioteca() {
  return biblioteca;
 }

 public void setBiblioteca(Biblioteca biblioteca) {
  this.biblioteca = biblioteca;
 } 
}

Telefone.java
package entidade;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="telefone")
public class Telefone {
 
 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 @Column(name="id_telefone")
 private Integer idTelefone;
 
 @Column(name="ddd", length = 3)
 private Integer ddd;
 
 @Column(name="nroTelefone", length = 8)
 private Integer nroTelefone;
 
 @ManyToOne()
 @JoinColumn(name="biblioteca_id", referencedColumnName="id")
 private Biblioteca biblioteca;

 public Integer getIdTelefone() {
  return idTelefone;
 }

 public void setIdTelefone(Integer idTelefone) {
  this.idTelefone = idTelefone;
 }

 public Integer getDdd() {
  return ddd;
 }

 public void setDdd(Integer ddd) {
  this.ddd = ddd;
 }

 public Integer getNroTelefone() {
  return nroTelefone;
 }

 public void setNroTelefone(Integer nroTelefone) {
  this.nroTelefone = nroTelefone;
 }

 public Biblioteca getBiblioteca() {
  return biblioteca;
 }

 public void setBiblioteca(Biblioteca biblioteca) {
  this.biblioteca = biblioteca;
 } 
}

Livro.java
package entidade;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="livro")
public class Livro {
 
 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 private Integer id;
 
 @Column(name="titulo")
 private String titulo;
 
 @Column(name="autor") 
 private String autor;
 
 @Column(name="isbn")
 private Integer isbn;
 
 @ManyToOne()
 @JoinColumn(name="biblioteca_id", referencedColumnName="id")
 private Biblioteca biblioteca;

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getTitulo() {
  return titulo;
 }

 public void setTitulo(String titulo) {
  this.titulo = titulo;
 }

 public String getAutor() {
  return autor;
 }

 public void setAutor(String autor) {
  this.autor = autor;
 }

 public Integer getIsbn() {
  return isbn;
 }

 public void setIsbn(Integer isbn) {
  this.isbn = isbn;
 }

 public Biblioteca getBiblioteca() {
  return biblioteca;
 }

 public void setBiblioteca(Biblioteca biblioteca) {
  this.biblioteca = biblioteca;
 }
}

AlunoServico.java
package servico;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import util.HibernateUtil;
import entidade.Aluno;
import entidade.Curso;

public class AlunoServico {

 private Session session;

 public static void main(String[] args) {
  AlunoServico servico = new AlunoServico();
  servico.criar();
  servico.consultas();
 }

 private void consultas() {
  iniciandoSessao();
  Criteria c = session.createCriteria(Curso.class);

  for (Curso elem : (List) c.list()) {
   System.out.println(elem);
  }

  c = session.createCriteria(Aluno.class);
  c.add(Restrictions.like("nome", "Tia%"));
  c.add(Restrictions.between("idade", 10, 34));
  for (Aluno elem : (List) c.list()) {
   System.out.println(elem);
  }

  c = session.createCriteria(Aluno.class);
  c.add(Restrictions.like("nome", "Fla%"));
  c.add(
    Restrictions.or(
      Restrictions.eq("idade", 31), 
      Restrictions.isNull("idade")
    )
   );
  for (Aluno elem : (List) c.list()) {
   System.out.println(elem);
  }

  c = session.createCriteria(Aluno.class);
  c.add(
    Restrictions.in("nome", new String[] { "Tiago Ramos", "Flavia" })
   );
  c.add(
    Restrictions.disjunction()
     .add(Restrictions.isNull("idade"))
     .add(Restrictions.eq("idade", 30))
     .add(Restrictions.eq("idade", 31))
    .add(Restrictions.eq("idade", 34))
   );
  for (Aluno elem : (List) c.list()) {
   System.out.println(elem);
  }

  c = session.createCriteria(Aluno.class);
  c.add(Restrictions.like("nome", "F%"));
  c.addOrder(Order.asc("nome"));
  c.addOrder(Order.desc("idade"));
  c.setMaxResults(50);
  for (Aluno elem : (List) c.list()) {
   System.out.println(elem);
  }

 }

 private void criar() {

  Aluno a1 = new Aluno();
  a1.setIdade(34);
  a1.setNascimento(new Date());
  a1.setNome("Tiago Ramos");

  Aluno a2 = new Aluno();
  a2.setIdade(31);
  a2.setNascimento(new Date());
  a2.setNome("Flavia Nunes");

  List alunos = new ArrayList();
  alunos.add(a1);
  alunos.add(a2);

  Curso c = new Curso();
  c.setDescricao("Curso 01");
  c.setDuracao(3);
  c.setAlunos(alunos);

  a1.setCurso(c);
  a2.setCurso(c);

  iniciandoSessao();
  session.save(c);
  session.getTransaction().commit();

 }

 private void iniciandoSessao() {
  session = HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
 }
}

CursoServico.java
package servico;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.Session;

import util.HibernateUtil;
import entidade.Aluno;
import entidade.Curso;

public class CursoServico {

 private Session session;

 public static void main(String[] args) {

  CursoServico servico = new CursoServico();
  servico.criar();
  servico.consultas();
 }

 private void consultas() {
  iniciandoSessao();
  List alunos = session.createQuery("from Aluno where idade >  ?")
    .setInteger(0, 15)
    .list();

  for (Aluno elem : alunos) {
   System.out.println(elem);
  }
  
  alunos = session.createQuery("from Aluno where nome =  ? order by nome")
  .setString(0, "Flavia Nunes")
    .list();

  for (Aluno elem : alunos) {
   System.out.println(elem);
  }
  
  Aluno aluno = (Aluno) session.createQuery("from Aluno as a where a = ?")
    .setEntity(0, alunos.get(0))
    .uniqueResult();
  System.out.println(aluno);
 }

 private void criar() {

  Aluno a1 = new Aluno();
  a1.setIdade(34);
  a1.setNascimento(new Date());
  a1.setNome("Tiago Ramos");

  Aluno a2 = new Aluno();
  a2.setIdade(31);
  a2.setNascimento(new Date());
  a2.setNome("Flavia Nunes");

  List alunos = new ArrayList();
  alunos.add(a1);
  alunos.add(a2);

  Curso c = new Curso();
  c.setDescricao("Curso 01");
  c.setDuracao(3);
  c.setAlunos(alunos);

  a1.setCurso(c);
  a2.setCurso(c);

  iniciandoSessao();
  session.save(c);
  session.getTransaction().commit();

 }

 private void iniciandoSessao() {
  session = HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
 }
}

BibliotecaServico.java
package servico;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import util.HibernateUtil;
import entidade.Biblioteca;
import entidade.Endereco;
import entidade.Livro;
import entidade.Telefone;

public class BibliotecaServico {
 
 public static void main(String[] args) {
  
  BibliotecaServico servico = new BibliotecaServico();  
  servico.criar();
  servico.cadastrarLivros();  
  servico.listar();
 }

 private void listar() {
  Session s = HibernateUtil.getSessionFactory().openSession();
  s.beginTransaction();
  
  Criteria c = s.createCriteria(Livro.class);
  c.addOrder(Order.asc("titulo"));
  
  for(Livro elem : (List) c.list()){
   System.out.println(elem.getTitulo());
  }
  
  s.getTransaction().commit();
 }

 private void cadastrarLivros() {
  Session s = HibernateUtil.getSessionFactory().openSession();
  s.beginTransaction();
  
  // Consulta da biblioteca
  Criteria c = s.createCriteria(Biblioteca.class);
  c.add(Restrictions.eq("nome", "Biblioteca do Renan"));
  
  // Recupera a biblioteca
  Biblioteca b = (Biblioteca) c.uniqueResult();
  
  Livro livro1 =  new Livro();
  livro1.setAutor("Autor 1");
  livro1.setIsbn(123456);
  livro1.setTitulo("titulo 1");
  livro1.setBiblioteca(b);
  
  Livro livro2 =  new Livro();
  livro2.setAutor("Autor 2");
  livro2.setIsbn(123456);
  livro2.setTitulo("titulo 2");
  livro2.setBiblioteca(b);
  
  // Adicionando livros na coleção
  ArrayList livros = new ArrayList();
  livros.add(livro1);
  livros.add(livro2);
  
  b.setLivros(livros);
  
  s.save(b);
  s.getTransaction().commit();
  
 }

 private void criar() {
  
  Session s = HibernateUtil.getSessionFactory().openSession();
  s.beginTransaction();
  
  Endereco e = new Endereco();
  e.setNro("123");
  e.setRua("Minha Rua");
  
  Telefone t = new Telefone();
  t.setDdd(061);
  t.setNroTelefone(35979898);
  
  Biblioteca b = new Biblioteca();
  b.setCnpj("123456");
  b.setNome("Biblioteca Renan");
  
  b.setEndereco(e);
  
  b.setTelefone(new ArrayList());
  b.getTelefone().add(t);
  
  e.setBiblioteca(b);
  
  s.save(b);  
  s.getTransaction().commit();
 }
}

HibernateUtil.java
package util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

 private static final SessionFactory sessionFactory;

 static {
  try {
   // Criando a SessionFactory apartir no hibernate.cfg.xml
   sessionFactory = new AnnotationConfiguration().configure()
     .buildSessionFactory();
  } catch (Throwable ex) {
   System.err.println("Não foi possivel criar a SessionFactory." + ex);
   throw new ExceptionInInitializerError(ex);
  }
 }

 public static SessionFactory getSessionFactory() {
  return sessionFactory;
 }

}

4 comentários:

rodrigogac disse...

Boa Tarde já estou dando uma olhada na aula qualquer duvida eu ja tiro pelo comentario valew

rodrigogac disse...

Boa Tarde Thiago blz queria saber o que ocasionou aquele erro no finalzinho da aula, tive que sair e perdi a explicação se vc puder me explicar ficarei grato.

Tiago Ramos disse...

Na verdade não foi um erro. As operações estava sendo realizadas conforme esperavamos só que eu estava utilizando a anotacao @OneToOne(mappedBy="biblioteca", fetch=FetchType.LAZY) com o FetchType setado. Ou seja, os endereços não deveriam ser retornados. E na verdade eram gerados dois sql, um com a biblioteca e outro trazendo o endereco. Quando utilizamos realacionamento 1-1 o FetcType.Lazy funciona de uma forma diferente de quando utilizado com relacionamentos 1-n ou n-1.

rodrigogac disse...

Bom dia, Legal entendi o que aconteceu valew thiago !!

Google