Hibernate

1 resposta
ccefetpb

Estou tentanto gerar o banco da minha app, mas estou enfrentando um problema muito estranho.

Segue a classe que está mapeada:

@Entity(name="users")
public class UserOff implements User{

	@Id
	@Column(name="id_user")
	private long id;
	
	@Column(name="name")
	private String name;
	
	@Column(name="screen_name",unique=true, nullable=false)
	private String screenName;
	public UserOff() {
	}
//gets e sets
}

Abaixo o hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<hibernate-configuration>
	<session-factory name="">
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="connection.url">jdbc:mysql://localhost/projeto</property>
		<property name="connection.username">root</property>
		<property name="connection.password">12345</property>
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>

		<mapping class="br.com.socialquery.twitter.offline.model.UserOff" />
	</session-factory>
</hibernate-configuration>

E abaixo a classe que gera o banco:

package br.com.myproject.hibernate.dao.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;


public class HibernateUtil {

	private static SessionFactory sessionFactory;
	private static AnnotationConfiguration configuration;
	private static Session session;
	
	static
	{
		configuration = new AnnotationConfiguration();
		configuration.configure("br/com/project/cfg/hibernate.cfg.xml");
		sessionFactory = configuration.buildSessionFactory();
	}
	
	private static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
	
	public static void geraBanco() {
		SchemaExport se = new SchemaExport(configuration);
		se.create(true, true);
	}
	
	public static void open(){
		session = HibernateUtil.getSessionFactory().openSession();
		session.beginTransaction();
	}

	public static Session getOpenSession(){
		if (session == null || !session.isOpen())
			open();
		return session;
	}
	
	public static void close(){
		try{
			session.getTransaction().commit();
		}catch (Exception e) {
			session.getTransaction().rollback();
		}finally{
			session.close();
		}
	}
	
	public static void main(String[] args) {
		try {
			HibernateUtil h = new HibernateUtil();
			h.geraBanco();
			System.out.println("ok");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Uso esses códigos em todos os meus projetos, mas nesse especificamente não está funcionando.

O erro que dá:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
java.lang.ExceptionInInitializerError
Caused by: java.lang.reflect.MalformedParameterizedTypeException
	at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(Unknown Source)
	at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(Unknown Source)
	at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(Unknown Source)
	at sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(Unknown Source)
	at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Unknown Source)
	at sun.reflect.generics.tree.ClassTypeSignature.accept(Unknown Source)
	at sun.reflect.generics.repository.MethodRepository.getReturnType(Unknown Source)
	at java.lang.reflect.Method.getGenericReturnType(Unknown Source)
	at org.hibernate.annotations.common.reflection.java.JavaXClass.getDeclaredMethodProperties(JavaXClass.java:90)
	at org.hibernate.annotations.common.reflection.java.JavaXClass.getDeclaredProperties(JavaXClass.java:106)
	at org.hibernate.annotations.common.reflection.java.JavaXClass.getDeclaredProperties(JavaXClass.java:98)
	at org.hibernate.cfg.AnnotationBinder.addElementsOfAClass(AnnotationBinder.java:1023)
	at org.hibernate.cfg.AnnotationBinder.getElementsToProcess(AnnotationBinder.java:859)
	at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:666)
	at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:534)
	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:286)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
	at br.com.myproject.hibernate.dao.util.HibernateUtil.<clinit>(HibernateUtil.java:19)
Exception in thread "main"

Alguém sabe me explicar a razao? Ou como consertar?

1 Resposta

romarcio
Seu arquivo hibernate.cfg.xml está mal configurado, ta faltando o DOCTYPE. Da uma olhada nesse exemplo:
&lt;?xml version='1.0' encoding='utf-8'?&gt;
&lt;!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;

&lt;hibernate-configuration&gt;

    &lt;!-- a SessionFactory instance listed as /jndi/name --&gt;
    &lt;session-factory name="java:hibernate/SessionFactory"&gt;
      //..... 
    &lt;/session-factory&gt;

&lt;/hibernate-configuration&gt;
Criado 1 de abril de 2012
Ultima resposta 1 de abr. de 2012
Respostas 1
Participantes 2