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 Collectionalunos; 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 Collectionlivros; @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(); Listalunos = 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:
Boa Tarde já estou dando uma olhada na aula qualquer duvida eu ja tiro pelo comentario valew
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.
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.
Bom dia, Legal entendi o que aconteceu valew thiago !!
Postar um comentário