Erro na Sessao em hibernate

5 respostas
J

Eu estou com o seguinte problema, configurei o hibernate conforme tutorial,
mas na hora de rodar apareceu o seguinte erro:

Exception in thread "main" java.lang.NoClassDefFoundError: org/dom4j/DocumentException
	at br.com.Util.HibernateUtility.<clinit>(HibernateUtility.java:11)
	at br.com.Util.Teste.main(Teste.java:9)
Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
	... 2 more

o erro aponta para duas linhas, uma em cada Classe que tenho a seguir
aqui a exception aponta para linha 11

package br.com.Util;

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

e aqui a exception é na linha 9:

package br.com.Util;

import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.Classes.Curso;

public class Teste {
	public static void main(String[] args) {
		Session sessao = HibernateUtility.getSession(); 
		Transaction transaction = sessao.beginTransaction(); 

		(...)
	}
}

que assim nota que a exception aponta para a sessão, mas não sei
o que está errado. Alguem pode me ajudar???

valeu!!!

5 Respostas

vitenho

ve se o jar do dom4j ta no classpath do projeto

R

a primeira linha do stack trace é a que te interessa…
baixe o dom4j.jar,coloque-o no classpath e seja feliz :slight_smile:

J

Realmente estava faltando o dom4j.jar mas agora ele aparece a seguinte exception:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
org.hibernate.InvalidMappingException: Could not parse mapping document from resource Curso.hbm.xml
	at org.hibernate.cfg.Configuration.addResource(Configuration.java:569)
	at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1587)
	at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1555)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1534)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1508)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1428)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1414)
	at br.com.Util.HibernateUtility.<clinit>(HibernateUtility.java:11)
	at br.com.Util.Teste.main(Teste.java:10)
Caused by: org.hibernate.MappingException: class Curso not found while looking for property: id
	at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:74)
	at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:276)
	at org.hibernate.cfg.HbmBinder.bindSimpleId(HbmBinder.java:401)
	at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:334)
	at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:273)
	at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:144)
	at org.hibernate.cfg.Configuration.add(Configuration.java:669)
	at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:504)
	at org.hibernate.cfg.Configuration.addResource(Configuration.java:566)
	... 8 more
Caused by: java.lang.ClassNotFoundException: Curso
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:169)
	at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:100)
	at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:70)
	... 16 more
Exception in thread "main" java.lang.NullPointerException
	at br.com.Util.HibernateUtility.getSession(HibernateUtility.java:19)
	at br.com.Util.Teste.main(Teste.java:10)

parece que o erro está no mapeamento ou na classe curso, segue abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="Curso" table="curso">
		<id name="id">
			<generator class="increment" />
		</id>
		<property name="nome" />
		<property name="descricao" />
		<set name="disciplina" inverse="true">
			<key column="curso_id" />
			<one-to-many class="Disciplina" />
		</set>
	</class>
</hibernate-mapping>

e agora a classe:

package br.com.Classes;

public class Curso {
	private Integer id;
	private String nome;
	private String descricao;
	private Disciplina disciplina;//outra classe com relação one-to-many

	 //getters e setters

valeu pela ajuda!!

B

Coloque o caminho inteiro da classe no mapeamento.

J

valeu pela ajuda, consegui!!!
Era o caminho mesmo que estava faltando!!!

A minha dúvida agora é somente quanto a quais atributos
são colocados na classe quando houver relação one-to-one e one-to-many:

por exemplo numa relação one-to-one:

public class Pessoa {
        private Integer id;
	private String nome;
	private String telefone;
	private Endereco endereco;//classe que faz relacionamento
        (...)

para que eu possa relacionar as duas, eu preciso ter um atributo Pessoa
na Classe Endereço, senão como é que deve ser esta Classe, exemplo:

public class Endereco {
	private Integer id;
	private String bairro;
	private String cidade;
	private Pessoa pessoa;//é necessário este atributo, ou tem outra forma??
        (...)

como elas devem ser criadas nos dois tipos de relacionamentos one-to-one e one-to-many??

valeu pessoal!!!

Criado 1 de setembro de 2009
Ultima resposta 1 de set. de 2009
Respostas 5
Participantes 4