Comando buildSessionFactory(); deprecated

2 respostas
R

Boa tarde a todos estou com uma dúvida o Hibernate 4 o comando buildSessionFactory(); está deprecado, procurei na internet e achei esse comando pronto

import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateUtil {
	private static ServiceRegistry serviceRegistry;
	private static SessionFactory sessionFactory =configureSessionFactory();

	private static SessionFactory configureSessionFactory() throws HibernateException {
		   Configuration configuration = new Configuration();  
		    configuration.configure("hibernate.cfg.xml");  
		    serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();          
		    sessionFactory = configuration.buildSessionFactory(serviceRegistry);//essa linha gera  uma Exception
		    return sessionFactory;  
		  
	}
	
	public static SessionFactory getSessionFactory(){
		return sessionFactory;
	}
}

Para substituir o comando antigo

import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;


public class HibernateUtil {

	private static SessionFactory sessionFactory =configureSessionFactory();

	private static SessionFactory configureSessionFactory() throws HibernateException {
		   Configuration configuration = new Configuration();  
		    configuration.configure("hibernate.cfg.xml");  
		    
		    return configuration.buildSessionFactory();
		  
	}
	
	public static SessionFactory getSessionFactory(){
		return sessionFactory;
	}
}

Mas quando faço a chamada

public void salvar(Contato contato){
		Session sessao = null;
		Transaction transacao = null;
		
		sessao = HibernateUtil.getSessionFactory().openSession();//não inicia a sessão no hibernate 4
		transacao = sessao.beginTransaction();
		sessao.save(contato);
		transacao.commit();
		
		sessao.close();
	}

a linha sessao = HibernateUtil.getSessionFactory().openSession(); gera uma Exception ele não inicia a sessão isso ocorre apenas com o hibernate 4 no hibernate 3 funciona normalmente procurei na net e não achei solução para isso alguem que ja tenha feito algum projeto no hibernate 4 poderia me ajudar por favor desde ja agradeço.

2 Respostas

jweibe

posta a exception gerada.

R

A seguinte exceção ocorre

Exception in thread "main" java.lang.ExceptionInInitializerError
	at com.example.crudxml.ContatoCrudXML.salvar(ContatoCrudXML.java:18)
	at com.example.crudxml.ContatoCrudXML.main(ContatoCrudXML.java:104)
Caused by: org.hibernate.MappingException: Could not determine type for: String, at table: contato, for columns: [org.hibernate.mapping.Column(nome)]
	at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:305)
	at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:289)
	at org.hibernate.mapping.Property.isValid(Property.java:238)
	at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:468)
	at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
	at org.hibernate.cfg.Configuration.validate(Configuration.java:1294)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1736)
	at com.example.conexao.HibernateUtil.configureSessionFactory(HibernateUtil.java:18)
	at com.example.conexao.HibernateUtil.<clinit>(HibernateUtil.java:11)
	... 2 more

Estudando aqui descobri mais uma cosia a exceção ocorre quando eu coloco o arquivo hbm.xml dentro do hibernate.cfg.xml segue as duas classes xml

classe Contato.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.example.crudxml">
	<class name="com.example.crudxml.Contato" table="contato">
		<id name="codigo" type="Integer" column="codigo">
			<generator class="assigned"></generator>
		</id>
		<property name="nome" type="String" column="nome"></property>
		<property name="telefone" type="String" column="telefone"></property>
		<property name="email" type="String" column="email"></property>
		<property name="dataCadatro" type="date" column="dt_cad"></property>
		<property name="observacao" type="String" column="obs"></property>
	</class>

</hibernate-mapping>

classe hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="connection.url">jdbc:mysql://localhost/agenda</property>
		<property name="connection.username">root</property>
		<property name="connection.password">root</property>
		<property name="current_session_context_class">thread</property>
		
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>
		<property name="generate_statistics">true</property>
		<property name="use_sql_comments">true</property>
		
		<mapping resource="Contato.hbm.xml"/>
	</session-factory>		
</hibernate-configuration>

Se a linha for retirada o código conecta sem erro ambos os Contato.hbm.xml e hibernate.cfg.xml estão no mesmo pacote

Criado 7 de setembro de 2012
Ultima resposta 7 de set. de 2012
Respostas 2
Participantes 2