Ainda Hibernate: Queries

12 respostas
marcoantoniorocha

Galera,

Alguém tem algum exemplo de como executar queries simples no Hibernate?

:arrow: Selecionar todos os registros
:arrow: Selecionar registros seguindo uma condição básica

Obrigado

12 Respostas

marcoantoniorocha

Descobri um pouco sobre as queries, mas agora o problema é com o dialect.

Estou com todos os jars do hibernate no classpath mas ele não encontra o net.sf.hibernate.dialect.MySQLDialect

Alguém sabe onde conseguir o download?

marcoantoniorocha

Bom… consegui resolver meus problemas:

:arrow: Selecionar todos os registros:

from estado in class com.marcorochabean.Estado

:arrow: Selecionar todos os registros, com uma condição:

from estado in class com.marcorochabean.Estado where estado.sigla = 'SP'

:arrow: Driver do dialect para o MySQL:

cirrus.hibernate.sql.MySQLDialect

:!: :!: Apenas atentem pois a documentação ainda está desatualizada com relação aos dialects…

cv1

Esse topico ta’ parecendo um blog :smiley:

Bom, de qqer forma, legal vc ter conseguido se virar :slight_smile:

E, ah, fica meio esperto com a documentacao do Hibernate - ela nao esta sempre atualizada, ainda mais agora que o pessoal passou pra versao 2.0 :smiley:

ricardolecheta

cirrus.hibernate.sql.MySQLDialect é do Hibernate

net.sf.hibernate.dialect.MySQLDialect é do Hibernate2

veja no download que vc pode baixar o hibernate ou o hibernate2
http://sourceforge.net/project/showfiles.php?group_id=40712

no hibernate2 não precisa fazer
“from estado in class com.marcorochabean.Estado”

basta fazer
“from estado”

A

aproveitando o post

ricardo, vc tem algum exemplo bem simples de como usar o hibernate 2???

pois eu segui os exemplos do hibernate 1 aqui do guj e funcionou, agora o hibernate 2 eu nao consegui fazer funcionar

um bem simples, mas que funcione pra mim se baseiar pra iniciar os estudo

pode me enviar via email?

alex.lopes2000(arroba)bol.com.br

valeu

ricardolecheta

é a mesma coisa, só muda o modo de se obter a SessionFactory

Configuration c = new Configuration();
c.addClass(Pessoa.class); // precisa existir o Pessoa.hbm.xml
SessionFactory sessionFactory = c.buildSessionFactory();
Session session = sessionFactory.openSession();

Pessoa.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
    <class name="bean.Pessoa" table="Pessoa">

        <id name="id" column="ID" type="int">
            <generator class="assigned">
            </generator>
        </id>

        <property name="nome" type="string" column="Nome"/>

        <property name="fone" type="string" column="Fone"/>

    </class>
</hibernate-mapping>
public class Pessoa
{
	private int id;
	private String nome;
	private String fone;

	// gets & sets
}
Daniel_Quirino_Olive

Uma dica para quem quiser fazer pesquisas no banco de dados com alguma flexibilidade é usar a interface Query. Usando esta interface, você pode fazer pesquisas usando funções de agregação (min, max, sum, avg…) joins e o que sua imaginação quiser (você consegue os mesmos resultados usando Session.find() ). Seu uso é bem tranqüilo. Veja aqui: http://hibernate.bluemars.net/hib_docs/reference/html_single/#manipulating-data-s5

A

aqui nao deu muito certo meus testes com hibernate 2… vou mostrar como esta meu teste.

Pessoa.class

public class Pessoa {
	private int id;
	private String nome;
	private String fone;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getFone() {
		return fone;
	}
	public void setFone(String fone) {
		this.fone = fone;
	}
	public Pessoa() {
	}
  public Pessoa(int id) {
  	this.id = id;
  }
  public Pessoa(int id, String nome, String fone) {
  	this.id = id;
  	this.nome = nome;
  	this.fone = fone;
  }
}

PessoaDAO

import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;

public class PessoaDAO {
	private SessionFactory sessionFactory;
	public PessoaDAO() throws Exception {
		Configuration c = new Configuration(); 
		c.addClass(Pessoa.class); // precisa existir o Pessoa.hbm.xml 
		sessionFactory = c.buildSessionFactory(); 
	}
}

Arquivo Pessoa.hbm.xml

<?xml version="1.0"?> 

<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> 

<hibernate-mapping> 
    <class name="Pessoa" table="Pessoa"> 

        <id name="id" column="ID" type="int"> 
            <generator class="assigned"> 
            </generator> 
        </id> 

        <property name="nome" type="string" column="Nome"/> 

        <property name="fone" type="string" column="Fone"/> 

    </class> 
</hibernate-mapping>

arquivo hibernate.properties

hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost:3306/java
hibernate.connection.username = java
hibernate.connection.password = java
hibernate.dialect = net.sf.hibernate.dialect.MySQLDialect

Arquivo Principal

import javax.swing.JOptionPane;
public class Principal {
  public Principal() {
  	try {
  		PessoaDAO dao = new PessoaDAO();
  		JOptionPane.showMessageDialog(null,"Funcionou");
  	} catch (Exception erro) {
  		erro.printStackTrace();
		  JOptionPane.showMessageDialog(null,"Erro");
  	}
  }
	public static void main(String[] args) {
		new Principal();
	}
}

Agora o ERRO!!!

28/07/2003 09:08:21 net.sf.hibernate.cfg.Environment <clinit>
INFO: Hibernate 2.0 final
28/07/2003 09:08:21 net.sf.hibernate.cfg.Environment <clinit>
INFO: loaded properties from resource hibernate.properties: {hibernate.connection.username=java, hibernate.connection.password=java, hibernate.cglib.use_reflection_optimizer=true, hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect, hibernate.connection.url=jdbc:mysql://localhost:3306/java, hibernate.connection.driver_class=com.mysql.jdbc.Driver}
28/07/2003 09:08:21 net.sf.hibernate.cfg.Environment <clinit>
INFO: using CGLIB reflection optimizer
28/07/2003 09:08:21 net.sf.hibernate.cfg.Environment <clinit>
INFO: JVM proxy support: true
28/07/2003 09:08:21 net.sf.hibernate.cfg.Configuration addClass
INFO: Mapping resource: Pessoa.hbm.xml
28/07/2003 09:08:22 net.sf.hibernate.cfg.Binder bindRootClass
INFO: Mapping class: Pessoa -> Pessoa
java.lang.ExceptionInInitializerError
	at net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:613)
	at PessoaDAO.<init>(PessoaDAO.java:9)
	at Principal.<init>(Principal.java:5)
	at Principal.main(Principal.java:13)
Caused by: java.lang.IllegalStateException: No backend found
	at net.sf.cglib.CodeGenerator.<init>(CodeGenerator.java:127)
	at net.sf.cglib.KeyFactoryGenerator.<init>(KeyFactoryGenerator.java:93)
	at net.sf.cglib.KeyFactory.create(KeyFactory.java:114)
	at net.sf.hibernate.impl.SessionFactoryImpl.<clinit>(SessionFactoryImpl.java:318)
	... 4 more
Exception in thread "main"

Alguma idéia do que pode ser isso??

Alguns detalhes: no hibernate 1 funcionou
eu importei todos os arquvos .jar pra dentro do eclipse(estou testando isso dentro do eclipse), segue abaixo o arquivo de classpath do eclipse

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path=""/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="lib" path="C:/Java/Ferramentas/commons-collections-2.1/commons-collections.jar"/>
    <classpathentry kind="lib" path="C:/Java/Ferramentas/commons-lang-1.0.1/commons-lang-1.0.1.jar"/>
    <classpathentry kind="lib" path="C:/Java/Ferramentas/commons-logging-1.0.2/commons-logging.jar"/>
    <classpathentry kind="lib" path="C:/Java/Ferramentas/commons-logging-1.0.2/commons-logging-api.jar"/>
    <classpathentry kind="lib" path="C:/Java/Ferramentas/hibernate2/cglib-1.0.jar"/>
    <classpathentry kind="lib" path="C:/Java/Ferramentas/hibernate2/commons-beanutils-1.6.1/commons-beanutils.jar"/>
    <classpathentry kind="lib" path="C:/Java/Ferramentas/hibernate2/dom4j-1.4/dom4j.jar"/>
    <classpathentry kind="lib" path="C:/Java/Ferramentas/hibernate2/dom4j-1.4/dom4j-full.jar"/>
    <classpathentry kind="lib" path="C:/Java/Ferramentas/hibernate2/hibernate/hibernate2.jar"/>
    <classpathentry kind="lib" path="C:/Java/Ferramentas/mySQL/mysql-connector-java-3.1.0-alpha/mysql-connector-java-3.1.0-alpha-bin.jar"/>
    <classpathentry kind="output" path=""/>
</classpath>
ricardolecheta

o arquivo Pessoa.hbm.xml está no mesmo diretório onde está a classe Pessoa?

A

sim, esta tudo no mesmo diretorio, ou seja, na raiz da aplicação, eu nao criei pacotes.

fiz tudo na raiz apenas pra testar

Daniel_Quirino_Olive

o Hibernate 2 usa uma biblioteca chamada CGLIB para trabalhos de reflexão. E é nela que está o problema: eu estava fazendo um framework baseada nesta biblioteca e sempre obtenho o mesmo problema. Mandei um email para o responsável pelo projeto para que ele pudesse me dar uma luz, mas ainda não obtive respostas. Qualquer coisa, dou um toque.

[]s

A

humm, ta certo Daniel
realmente essa é uma biblioteca que no hibernate 1 nao tinha…

agora o que eu acho estranho é que funciona em um monte de lugar, e porque aqui nao funciona? nem aqui e nem em casa…

aqui uso win2k e em casa o win98, qualquer coisa eu posso testar no Linux que tenho aqui tb.

será que alguem tem um exemplo bem simples que tem certeza que compila, pra mim pegar aqui, tentar compilar aqui pra ver se o problema é aqui tb

valeu

Criado 27 de julho de 2003
Ultima resposta 28 de jul. de 2003
Respostas 12
Participantes 5