Hibernate

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

[code]
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("joana@hotmail.com");
	p.setDataNasc_Pessoa(new GregorianCalendar(1975,
			GregorianCalendar.NOVEMBER, 29));

	sessao.save(p);

	transaction.commit();
	sessao.close(); 
}

}[/code]

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("franga@hotmail.com");
			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

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

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:

:???:

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:

[code]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();
}

}[/code]

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

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

[code] private SessionFactory factory;

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

:???:

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

[code]
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();
}

}[/code]

Obrigado Guilherme! Abraço[/b]

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.

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!

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!

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

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.