Hibernate

10 respostas
A

Amigos, segui um tutorial aqui do PJ mas está acontecendo algo de estranho. É o seguinte.... com a classe Teste consegui inserir dados no Banco mas com a Teste2 aparece o seguinte WARN:

hibernate.connection.UserSuppliedConnectionProvider  -> No connection properties specified - the user must supply JDBC connections

Já li no forum e normalmente quando aparece esse WARN é quando o hibernate.cfg.xml está mal configurado ou não está no sitio certo ou há problemas com a classpath.

:arrow: Mas então o hibernate.cfg.xml está correcto para a classe Teste e pra Teste2 não? 8O :?: :evil:

Vou mostrar as respectivas classes:

Classe Teste
import org.hibernate.Session;
import org.hibernate.Transaction;
import java.util.GregorianCalendar;

public class Teste {

	public static void main(String[] args) {

		Session sessao = HibernateUtility.getSession(); 
		Transaction transaction = sessao.beginTransaction(); 

		Pessoa p = new Pessoa(); 

		p.setBI_Pessoa("10727098");
		p.setNome_Pessoa("Joana");
		p.setContr_Pessoa("11423423");
		p.setEmail_Pessoa("[email removido]");
		p.setDataNasc_Pessoa(new GregorianCalendar(1975,
				GregorianCalendar.NOVEMBER, 29));

		sessao.save(p);

		transaction.commit();
		sessao.close(); 
	}
}
Classe Teste2
import java.util.GregorianCalendar;

public class Teste2 {

	public static void main(String[] args) throws Exception {

		try {
			Pessoa p = new Pessoa();
			p.setBI_Pessoa("104324");
			p.setNome_Pessoa("Franga");
			p.setContr_Pessoa("11443423");
			p.setEmail_Pessoa("[email removido]");
			p.setDataNasc_Pessoa(new GregorianCalendar(1977,
					GregorianCalendar.NOVEMBER, 28));

			PessoaDAO dao = new PessoaDAO();
			dao.insert(p);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
Vou mostrar também a classe PessoaDAO:
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import org.hibernate.Transaction;

public class PessoaDAO {

	private SessionFactory factory;

	public PessoaDAO() throws Exception {
		factory = new Configuration().addClass(Pessoa.class)
				.buildSessionFactory();
	}

	public void insert(Pessoa p) throws Exception {
		Session session = factory.openSession();
		Transaction tx = session.beginTransaction();
		tx.begin();
		session.save(p);
		tx.commit();
		session.close();
	}
}
... e o 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>
	
		<property name="hibernate.dialect">
		org.hibernate.dialect.MySQLDialect
		</property>
		
		<property name="hibernate.connection.driver_class">
		com.mysql.jdbc.Driver
		</property>

		<property name="hibernate.connection.url">
		jdbc:mysql://localhost:3306/testedb
		</property>
		
		<property name="hibernate.connection.username">
		root
		</property>
	
		<property name="hibernate.connection.password">
		minhapassword
		</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="Pessoa.hbm.xml"/>

</session-factory>
</hibernate-configuration>

Agradeço toda a ajuda.
Abraço

10 Respostas

G

Acho que esse link pode te ajudar: http://www.guj.com.br/posts/list/22079.java

A

Não ajudou mto Guilherme! :sad:

Estou pesquisando, mas continuo com o mesmo problema. É estranho ele fazer tudo direitinho com a classe Teste e com a classe Teste2 dizer que o problema é esse:

:???:

G

Deveria ter ajudado, pois o cara tem a mesma dúvida que a sua :lol:

A forma do seu DAO e a classe Teste está diferente, teria que ser assim:

import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import org.hibernate.Transaction;

public class PessoaDAO {

   public void insert(Pessoa p) throws Exception {
      Session session = HibernateUtility.getSession();
      Transaction tx = sessao.beginTransaction();
      tx.begin();
      session.save(p);
      tx.commit();
      session.close();
   }

}
A

Assim já deu! Mas é isso que se pretende dentro de uma classe xxxDAO?

No tutorial que eu segui ([url]http://www.javafree.org/javabb/viewtopic.jbb?t=3721[/url])
estava o seguinte código dentro da classe DAO:

private SessionFactory factory;

   public AmigoDAO() throws Exception{
       factory = new Configuration().addClass(Amigo.class).buildSessionFactory();
   }

:???:

Deixa ver se percebi: se usar a classe HibernateUtility e chamar o seu metodo getSession não preciso de instanciar na classe XXXXDAO o SessionFactory? É isso? É esta a maneira mais correcta e não dará problema futuramente?

Classe HibernateUtility
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtility {

	private static SessionFactory factory;
	static {
		try {
			factory = new Configuration().configure().buildSessionFactory();
		} catch (Exception e) {
			e.printStackTrace();
			factory = null;
		}
	}

	public static Session getSession() {
		return factory.openSession();
	}
}

Obrigado Guilherme! Abraço[/b]

G

Pelo que eu pude perceber, você está com código redundante. Já que existe a classe HibernateUtility que é reponsável por retornar uma instancia da SessionFactory, para que criar esse código novamente no DAO se você pode apenas realizar uma simples chamada a esse método ?

Isso não lhe causará problemas no futuro, pois dessa forma você está acoplando a criação da SessionFactory aos DAOs. Ao utilziar uma classe utilitária para criar a SessionFactory, você está externando uma responsabilidade.

A

Bem… pelos vistos já consegui fazer alguma coisa com o Hibernate!

Alguem me pode indicar um tutorial actualizado de como integrar WebWork com o Hibernate?

Alguem me diz como configurar a camada de persistencia?
Qual é a arquitectura usada? Uma classe para cada tabela (POJO´s), uma interface (com save, update…), outra HibernateUtility(para abrir/fechar sessão…), uma classe doFilter…

Confusão!!! :???: Já estou desanimando! :cry:

Vi um tutorial mto bom do Mauricio Junior mas esse integrava Hibernate com Spring…

Ajudem-me, esta é a parte mais difícil!

A

O que vcs acham destas implementações?

http://www.hibernate.org/328.html

http://www.guj.com.br/posts/list/33085.java

http://www.javafree.org/javabb/viewtopic.jbb?t=3721

http://www.guj.com.br/posts/downloadAttach/327.java

Como vcs preferem ter a camada de persistencia?

Obrigado!

G

De todas que testei, a que eu mais gosto e recomendo é Spring + Hibernate. Produtividade na certa!

A

Guillherme… sigo então o tutorial do Maurício é?

Realmente estou procurando “produtividade”! :slight_smile: Só uma dúvida… uma vez que quero usar WW adiciono a framework Spring apenas e só para a camada de persistência é?

Obrigado e Abraço.

A

Criado 5 de outubro de 2006
Ultima resposta 13 de out. de 2006
Respostas 10
Participantes 2