Configurando o hibernate

Pessoar, to tentando usar o hibernate mas ta dando um erro assim:

… sendo que tanto meu hibernate.properties quanto o hibernate.cfg.xml estão configurando o dialeto e ambos estão juntos com os .class na pasta class.

hibernate.properties:

hibernate.cfg.xml:

saí de um problema enorme e caí logo em outro tentando aprender hibernate… quem ja passou por isso por favor ajude… Abraço!

porque você ta usando um hibernate.cfg.xml e um hibernate.properties?

um sobreescreve o outro, e ambos fazem a mesma coisa
porque não deixa só um?

(se eu errei em algo do que falei… alguem por favor me corrija!)

até!
=]

Então jbjares eu tenho um exemplo de cfg.xml ve se está igual… e outra coisa você não precisa do properties se você configurar no 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>
		<property name="hibernate.dialect">
			org.hibernate.dialect.OracleDialect
		</property>
		<property name="hibernate.connection.driver_class">
			oracle.jdbc.driver.OracleDriver
		</property>
		<property name="hibernate.connection.url">
			jdbc:oracle:thin:@localhost:1521:nomeDoBanco
		</property>
		<property name="hibernate.connection.username">user</property>
		<property name="hibernate.connection.password">pass</property>
		<!-- Condiguração do c3p0 -->
		<property name="hibernate.c3p0.max_size">10</property>
		<property name="hibernate.c3p0.min_size">2</property>
		<property name="hibernate.c3p0.timeout">5000</property>
		<property name="hibernate.c3p0.max_statements">10</property>
		<property name="hibernate.c3p0.idle_test_period">3000</property>
		<property name="hibernate.c3p0.acquire_increment">2</property>
		<!-- Configurações de debug -->
		<property name="show_sql">true</property>
		<property name="hibernate.generate_statistics">true</property>
		<property name="hibernate.use_sql_comments">true</property>
		
		<mapping resource="mapPessoa.hbm.xml" />
		
	</session-factory>
</hibernate-configuration>

ha ja ia me esquecendo o arquivo cfg.xml você adiciona ele na raiz do seu projeto logo após sua source folder, não coloque ele em pacotes, pois uns dias atrás um cara tinha o mesmo erro aqui no fórum também porque ele adicionou o arquivo dentro de um pacote…
eu passei esse link para ele visualizar onde deve ficar o arquivo (logo abaixo do src), depois de feito isso funcionou… segue link

[]'s espero ter ajudado…

[quote=alberto_ribeiro]ha ja ia me esquecendo o arquivo cfg.xml você adiciona ele na raiz do seu projeto logo após sua source folder, não coloque ele em pacotes, pois uns dias atrás um cara tinha o mesmo erro aqui no fórum também porque ele adicionou o arquivo dentro de um pacote…
eu passei esse link para ele visualizar onde deve ficar o arquivo (logo abaixo do src), depois de feito isso funcionou… segue link

[]'s espero ter ajudado…[/quote]

Obrigado pela ajuda amigo… agora eu to só com hibernate.cfg.xml, ta exatamente igual ao seu, fora as minhas configurações de banco e mapeamento de classes que são diferentes é claro…
Tb seguio exatamente as reconmendações de onde colocar o hibernate.cfg.xml… de acordo com o link… Mas não deu certo… daí eu tentei em todas as outras pastas inclusive em alguns casos repetindo o arquivo… ou seja tentei de tudo… Mas nada deu certo… o erro permanece o mesmo…

Valeu mesmo assim! Se mais alguem tiver como dar uma força eu agradeço! abraço

você poderia postar a classe sua que você usa para carregar esse arquivo… se eu nao me engano é a HibernateUtility.java

Então lá vai… depois de testar inumeras possibilidades, hoje meu projeto ta assim:

log4j.properties:

hibernate.cfg.xml

Message.hbm.xml

Message.java

messageDAO.java

Main.java

A tabela:

O erro:

jbjares,

Você colocou o drive JDBC do MySQL nas variáveis de ambiente? Ou no classpath da sua aplicação?

Abraço.

[quote=bland]jbjares,

Você colocou o drive JDBC do MySQL nas variáveis de ambiente? Ou no classpath da sua aplicação?

Abraço.[/quote]

Amigo bland,

Meus .jars todos do hibernate e do jdbc do mysql estão em uma pasta chamada libraries… adicionei ao meu projeto como new jars…
Acredito que isso seja a classpath… mas estão todos tb dentro da pasta de jars do jdk tb.

Oque vc acha?
abraço.

jbjares estranho estar dando este tipo de erro, tenho uma classe aqui tenta colocar ai no seu projeto, só que pra isso você terá que incluir aquele arquivo cfg.xml do jeito que está aquela figura que te mandei…

OBS: essa substitui a sua classe messageDAO, são iguais porém de maneira diferente…

private SessionFactory factory; 

public messageDAO() throws Exception 
{ 
         try {
            factory = new Configuration().configure().buildSessionFactory();

        } catch (Exception e) {
            e.printStackTrace();
            factory = null;
        }

} 

public void insert(Message message) throws Exception 
{ 
Session session = factory.openSession(); 
session.save(message); 
session.flush(); 
session.close(); 
} 


public void delete(Message message) throws Exception 
{ 
Session session = factory.openSession(); 
session.delete(message); 
session.flush(); 
session.close(); 
} 

entendeu ???

Valeu irmão… serei eternamente grato amigo… já ta quase… Graças a sua ajuda fui capaz de ver pela primeira vez as INFOS do hibernate rodando legal… sendo que ainda ta rolando um pequeno erro no final…

Estamos quase! vale a pena insistir… e contar com boas pessoas…
Valeu amigo…

o caminho que você está indicando do mapeamento da sua classe está errado, confere o caminho onde o arquivo Message.hbm.xml está e altere… vai funcionar…

obs: no mapping resource…

[]'s

[quote=alberto_ribeiro]o caminho que você está indicando do mapeamento da sua classe está errado, confere o caminho onde o arquivo Message.hbm.xml está e altere… vai funcionar…

obs: no mapping resource…

[]'s[/quote]

jiiiiiiiiiiiiiiiiiiiiiiiiiiiiihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!
viva viva viva… funcionou funcionouuuuuuuu… ebaaaaaaaaaaa
Ganhei meu dia!! Po! irmão… mais uma vez: Serei eternamente grato… conte comigo pro que precisar… te adicionei no msn… Valeu mesmo irmão… ta tudo lindo… agora eu vo aprender a criar um hibernateUtil… vou aprimorar isso aí…

Sim… ia esquecendo… ainda não ta´percistindo… ta tudo certo… tudo funcionando legal… mas num ta percistindo… Oque vc me aconselha amigo alberto?

ABRAÇÃO… IRMÃO… .PO VALEUUUUUUUUUUUUUUUUUU

faça:

public void insert(Message message) throws Exception
{
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
session.save(message);
tx.commit();
session.close();

}

public void insert(Message message) throws Exception
{
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
session.save(message);
tx.commit();
session.close();
}

cara que isso, a gente ta aki pra isso…

[]'s

PO! irmão mais uma vez e infinitamente obrigado… eu já até tinha resolvido a questão do commit… mas o amigo é realmente fora de série…
Valeu mesmo…

Pessoar… se alguem precisar de ajuda com as configurações básicas do hibernate podem contar comigo…
Abraço.

Aproveitando o tópico:

Eu tb estou com um erro com um tutorial que estou seguindo, qdo executo o AdicionaProduto:

Não foi possivel, Erro: Unknown entity: pacote.Produto

Minhas classes:

pacote.dao.ProdutoDAO

package pacote.dao;

import java.util.List;

import org.hibernate.Session;

import pacote.Produto;

public class ProdutoDAO {

	private  Session session;
	
	public ProdutoDAO(Session session){
		this.session = session;
	}
	
	public void salva(Produto p){
		this.session.save(p);
	}
	
	public void remove(Produto p){
		this.session.delete(p);
	}
	
	public Produto procura (Long id){
		return (Produto) this.session.load(Produto.class, id);
	}
	
	public void atualiza (Produto p){
		this.session.update(p);
	}
	
	public List<Produto> listaTudo(){
		return this.session.createCriteria(Produto.class).list();
	}
	
	public List<Produto> pagina(int inicio, int quantia){
		return this.session.createCriteria(Produto.class).setMaxResults(quantia).setFirstResult(inicio).list();
	}
}

pacote.Produto

package pacote;

import javax.persistence.*;
import org.hibernate.annotations.Entity;

@Entity
public class Produto {

	@Id 
	@GeneratedValue
	private Long id;
	private String nome;
	
	@Column(name="descricao", nullable = true, length = 50)
	private String descricao;
	private Double preco;
	
	//Get an Set
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Double getPreco() {
		return preco;
	}
	public void setPreco(Double preco) {
		this.preco = preco;
	}
	
	
	
}

pacote.HibernateFactory

package pacote;

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

public class HibernateFactory {

	private static SessionFactory factory;
	
	static{
		AnnotationConfiguration cfg = new AnnotationConfiguration();
		cfg.addAnnotatedClass(Produto.class);
		factory = cfg.buildSessionFactory();
	}
	
	public Session getSession(){
		return factory.openSession();
	}
	
}

pacote.AdicionaProduto

package pacote;

import org.hibernate.Session;

public class AdicionaProduto {

	public static void main(String[] args) throws Exception{
		
		try{
			Session session = new HibernateFactory().getSession();
		
			Produto p = new Produto();
			p.setNome("Correia Dentada");
			p.setDescricao("Correia Motor AP");
			p.setPreco(100.50);
		
			session.save(p);
		
			System.out.println("Id do Produto: " +p.getId());
		
			session.close();
		
		}catch(Exception e) {    
	         System.out.println("Não foi possivel, Erro: " + e.getMessage()); 
	     } 
	}
	
}

E o hibernate.properties, que está no meu src, fora dos pacotes.

#hibernate.dialect org.hibernate.dialect.MySQLDialect
#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
hibernate.dialect = org.hibernate.dialect.MySQLMyISAMDialect
hibernate.connection.driver_class = org.gjt.mm.mysql.Driver
hibernate.connection.url = jdbc:mysql://localhost:3306/test
hibernate.connection.username = root
hibernate.connection.password = ******

Marcelopolis

Cara, mostra teu mapeamendo… provavelmente falta só especificar o caminho completo de teu objeto percistente pra ele…

Abraço.

[quote]<?xml version="1.0" encoding="UTF-8"?>

<class name=    "pacote.dao.ProdutoDAO"    table="NOME_DA_TABELA">

    </id>
</class>
[/quote]

Ve se no mapeamento esse caminho ta sendo especificado completo… como tu descreveu a cima… e como ta no meu trecho de mapeamento aí na citação…

[quote=jbjares]Marcelopolis

Cara, mostra teu mapeamendo… provavelmente falta só especificar o caminho completo de teu objeto percistente pra ele…

Abraço.[/quote]

Então, to seguindo a apostila da Caelum, e aqui não fala nada de criar arquivos xml, apenas o uso de annotation!!! Veja o trecho:

Nosso primeiro passo é configurar o hibernate, portanto iniciamos instanciando uma
org.hibernate.cfg.AnnotationConfiguration.
// Cria uma configuração para a classe Produto
AnnotationConfiguration cfg = new AnnotationConfiguration();
A partir daí podemos adicionar quantas classes desejarmos a nossa configuração.
// Adiciona a classe Produto
cfg.addAnnotatedClass(Produto.class);
No nosso caso iremos adicionar somente a nossa classe Produto, gerando o seguinte
resultado para configurar o Hibernate:
// Cria uma configuração para a classe Produto
AnnotationConfiguration cfg = new AnnotationConfiguration();
// Adiciona a classe Produto
cfg.addAnnotatedClass(Produto.class);
Só isso não é suficiente para que o Hibernate esteja configurado com a classe Produto.
O Hibernate requer que descrevamos como a classe se relaciona com as tabelas no banco de
dados e fizemos isso através das anotações do Hibernate.
Essa configuração poderia ser feita através de um arquivo xml chamado hibernate.cfg.xml.

Marcelopolis cara… te confesso não ter conhecimento de como configurar pelo annotation… seu eu fosse vc tentaria usar xml mesmo… que é tranquilo e tem uma variedade bem maior de material para se pesquisar do que com annotations… eu realmente não sei te dizer exatamente oque fazer… Mas de repente tu poderias postar a disposição do classpath pra gente dar uma olhada…

Abraço…