Problema para conectar usando o hibernate.cfg.xml (Hibernate)

10 respostas
L

Pessoal

Sou novo no Hibernate, estou com dificuldade em utilizá-lo.Na minha classe onde vou fazer o Insert na tabela, quando a aplicação chega na linha "cfg.configure()" , simplismente a aplicação para de executar. Não da erro ou algo do tipo. No Console aparece assim:

0 [http-8080-2] INFO annotations.Version  - Hibernate Annotations 3.3.1.CR1
31 [http-8080-2] INFO cfg.Environment  - Hibernate 3.3.0.SP1
37 [http-8080-2] INFO cfg.Environment  - hibernate.properties not found
43 [http-8080-2] INFO cfg.Environment  - Bytecode provider name : javassist
51 [http-8080-2] INFO cfg.Environment  - using JDK 1.4 java.sql.Timestamp handling
832 [http-8080-2] INFO cfg.Configuration  - configuring from resource: hibernate.cfg.xml
833 [http-8080-2] INFO cfg.Configuration  - Configuration resource: hibernate.cfg.xml

Depois disso, a aplicação para, não executa mais. Estou enviando a configuração do hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?>
	<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
	 
	<hibernate-configuration>
	    <session-factory>
	 
	        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	        <property name="hibernate.connection.url">jdbc:mysql://localhost/dadoscd</property>
	        <property name="hibernate.connection.username">root</property>
	        <property name="hibernate.connection.password">faria2725</property>
	        <property name="hibernate.show_sql">true</property>
	        <property name="hibernate.format_sql">true</property>
	        <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
	 
	        <mapping class="br.com.cd.unidadeoperativa.UnidadeOperativa"/>
	 
	    </session-factory>
	</hibernate-configuration>

Segue abaixo a Classe UnidadeOperativa:

package br.com.cd.entidy;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="unidadeoperativa")
public class UnidadeOperativa {
	
	@Id @GeneratedValue
	private Integer coduo;
	@Column(length=50, nullable=false)
	
	private String descricao;
	
	public Integer getCoduo() {
		return coduo;
	}
	public void setCoduo(Integer coduo) {
		this.coduo = coduo;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

A Classe que estou tentando inserir os dados:

package br.com.cd.insert;

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

public class Insert {
	
	//Funcao para inserir dados no banco
	public static void insertdao(Object objeto){
				
		 AnnotationConfiguration cfg = new AnnotationConfiguration();
		 cfg.configure("hibernate.cfg.xml");
		 SessionFactory factory = cfg.buildSessionFactory();
		 Session session = factory.openSession();
		
		 Transaction tx = session.beginTransaction();
		 session.save(objeto);
		 tx.commit();
	}

}

A localização do arquivo hibernate.cfg.xml (Em anexo)

Obrigado

10 Respostas

JeffersonFelix

Amigo, acho que sua pasta source está apontada para a flex_src.
Se você colocar o hibernate.cfg.xml nesta pasta, já resolve.
Mas se quiser manter na pasta onde está, clique com o botão direito em seu projeto, depois Build Path -> Configure Build Path.
Selecione a guia source, e inclua o diretório onde está seu código fonte (src_java).
Acredito que isso resolva.

Abraço

JeffersonFelix

Bem, agora que vi que na saída do console aparentemente o hibernate está encontrando seu arquivo, mas é estranho não exibir nenhuma exceção.
De qualquer forma, tente configurando o seu build path para ver no que vai dar.

L

Jefferson,

Tentei colocar la no src_flex e deu o mesmo problema. Você tem mais alguma ideia do que pode ser?

Obrigado

romarcio

Aparentemente não tem nada errado no seu arquivo e o Hibernate está encontrando ele, se não estivesse, seria lançada uma exceção.
Coloque um try/catch nesse código, para ver se ele captura alguma exceção.

L

romarcio,

coloquei o try/catch e fiz algumas modificações, agora está dando um outro erro:

0 [http-8080-2] INFO annotations.Version  - Hibernate Annotations 3.3.1.CR1
45 [http-8080-2] INFO cfg.Environment  - Hibernate 3.3.0.SP1
51 [http-8080-2] INFO cfg.Environment  - hibernate.properties not found
57 [http-8080-2] INFO cfg.Environment  - Bytecode provider name : javassist
64 [http-8080-2] INFO cfg.Environment  - using JDK 1.4 java.sql.Timestamp handling
7409 [http-8080-2] WARN connection.UserSuppliedConnectionProvider  - No connection properties specified - the user must supply JDBC connections

O fonte:

public static void insertdao(Object objeto){
		AnnotationConfiguration cfg = new AnnotationConfiguration();
		SessionFactory factory = cfg.buildSessionFactory();
		Session session = factory.openSession();
		Transaction tx = session.beginTransaction();
		try {
			cfg.configure("hibernate.cfg.xml");
			session.save(objeto);
			tx.commit();	
		} catch (Exception e) {
			System.err.println(e);
			tx.rollback();
		}

	}

O erro acontece quando tento executar a linha "SessionFactory factory = cfg.buildSessionFactory();"

Alguma ideia?

Obrigado

romarcio

Na verdade não tem erro nenhum, apenas um WARN que não é erro. Altere o try/catch: public static void insertdao(Object objeto){ AnnotationConfiguration cfg = new AnnotationConfiguration(); try { SessionFactory factory = cfg.buildSessionFactory(); Session session = factory.openSession(); Transaction tx = session.beginTransaction(); cfg.configure("hibernate.cfg.xml"); session.save(objeto); tx.commit(); } catch (Exception e) { e.printStackTrace(); //System.err.println(e); //tx.rollback(); } }

L

Fiz o teste e ainda continua com erro

//Funcao para inserir dados no banco
	public static void insertdao(Object objeto){
		AnnotationConfiguration cfg = (AnnotationConfiguration) new AnnotationConfiguration().configure().buildSessionFactory();   
        try {     
            SessionFactory factory = cfg.buildSessionFactory();    
            Session session = factory.openSession();    
            Transaction tx = session.beginTransaction();  
            cfg.configure("hibernate.cfg.xml");    
            session.save(objeto);    
            tx.commit();        
        } catch (Exception e) {    
             e.printStackTrace();  
            //System.err.println(e);    
            //tx.rollback();    
        }      

	}
32 [http-8080-2] INFO cfg.Environment  - Hibernate 3.3.0.SP1
38 [http-8080-2] INFO cfg.Environment  - hibernate.properties not found
43 [http-8080-2] INFO cfg.Environment  - Bytecode provider name : javassist
64 [http-8080-2] INFO cfg.Environment  - using JDK 1.4 java.sql.Timestamp handling
210 [http-8080-2] INFO cfg.Configuration  - configuring from resource: /hibernate.cfg.xml
210 [http-8080-2] INFO cfg.Configuration  - Configuration resource: /hibernate.cfg.xml
romarcio
Tenta assim:
public static void insertdao(Object objeto){  
        SessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory();     
        try {       
            //SessionFactory factory = cfg.buildSessionFactory();      
            Session session = factory.openSession();      
            Transaction tx = session.beginTransaction();    
            //cfg.configure("hibernate.cfg.xml");      
            session.save(objeto);      
            tx.commit();          
        } catch (Exception e) {      
             e.printStackTrace();    
            //System.err.println(e);      
            //tx.rollback();      
        }        
  
    }
L

Valeu cara, agora funcionou legal

public static void insertdao(Object objeto){
		  try {   
	    	   SessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory(); 
	           Session session = factory.openSession();        
	           Transaction tx = session.beginTransaction();      
	           session.save(objeto);        
	           tx.commit();            
	       } catch (Exception e) {        
	            e.printStackTrace();      
	       }       

	}
romarcio
leandrofaria:
Valeu cara, agora funcionou legal
public static void insertdao(Object objeto){
		  try {   
	    	   SessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory(); 
	           Session session = factory.openSession();        
	           Transaction tx = session.beginTransaction();      
	           session.save(objeto);        
	           tx.commit();            
	       } catch (Exception e) {        
	            e.printStackTrace();      
	       }       

	}

Beleza, mas só uma observação sobre o Hibernate. Não é recomendado a cada método você criar uma SessionFactory. O correto é criar um objeto apenas e a partir dele você cria varias Session.
Da uma olhada nesse tutorial: http://mballem.wordpress.com/2011/03/09/utilizando-swing-com-hibernate-sessionfactory/

Criado 6 de outubro de 2012
Ultima resposta 7 de out. de 2012
Respostas 10
Participantes 3