Problemas com mapeamento no Hibernate

12 respostas
G

Olá pessoal,
Sou iniciante em Java, portanto peço ae um pouco da tolerância dos amigos :oops:
É o seguinte, estou tendo problemas com um certo mapeamento no hibernate, para facilitar, vou listar todos os arquivos aqui, em seguida continuo com a dúvida:

public class Eventos {
	public Eventos(){
	}
	private int idEvento = 0;
	private String evento = "";
	private String dataEvento = "";
	
	public int getIdEvento(){
		return this.idEvento;
	}
	public void setIdEvento(int idEvento){
		this.idEvento = idEvento;
	}
	public String getEvento(){
		return this.evento;
	}
	public void setEvento(String evento){
		this.evento = evento;
	}
	public String getDataEvento(){
		return this.dataEvento;
	}
	public void setDataEvento(String dataEvento){
		this.dataEvento = dataEvento;
	}
	
}
public class GerenciadorEventos {
	
	public String adcionarEmailPessoas(int idPessoa, String email){
		try {
			SessionFactory sf = new Configuration().configure("versao2/hibernate.cfg.xml").buildSessionFactory();
			Session s = sf.openSession();
			s.beginTransaction();
			Pessoas p = (Pessoas) s.load(Pessoas.class, new Integer(idPessoa));
			p.getEmail().add(email);
			s.getTransaction().commit();	
			//return "com sucesso";
		} catch (Exception e) {
			return "Erro "+e.getMessage();
		}
		return "com sucesso!!";

	}
	
	public void adcionarPessoasEventos(int idPessoa, int idEvento){
		SessionFactory sf = new Configuration().configure("versao2/hibernate.cfg.xml").buildSessionFactory();
		Session s = sf.openSession();
		s.beginTransaction();
		Pessoas p = (Pessoas) s.load(Pessoas.class, new Integer(idPessoa));
		Eventos e = (Eventos) s.load(Eventos.class, new Integer(idEvento));
		p.getEvents().add(e);
		s.getTransaction().commit();
	}

	public String salvarEvento(String evento, String data){
		try {
			SessionFactory sf = new Configuration().configure("versao2/hibernate.cfg.xml").buildSessionFactory();
			Session s = sf.openSession();
			Transaction tx = s.beginTransaction();
			Eventos c = new Eventos();
			c.setDataEvento(data);
			c.setEvento(evento);
			s.saveOrUpdate(c);
			tx.commit();
			s.close();
			return "Evento Incluído";
			
			
		} catch (Exception x) {
			return "erro aqui "+x.getMessage();
		}
	}
	
	public List listarEventos(){
		try {
			SessionFactory sf = new Configuration().configure("versao2/hibernate.cfg.xml").buildSessionFactory();
			Session s = sf.openSession();
			s.beginTransaction();
			List lista = s.createQuery("from Eventos").list();
			s.getTransaction().commit();
			return lista;
		} catch (Exception e) {
			System.out.println("erro");
		}

		return null;
	}
	

}
public class Pessoas {
	public Pessoas(){
	}
	
	private int idPessoa;
	private int idade;
	private String primeiroNome;
	private String ultimoNome;
	
	private Set email = new HashSet();
	private Set events = new HashSet();
	
	public Set getEvents(){
		return events;
	}
	public void setEvents(Set events){
		this.events = events;
	}
	
	public Set getEmail(){
		return this.email;
	}
	public void setEmail(Set email){
		this.email = email;
	}
	public void setIdPessoa(int idPessoa){
		this.idPessoa = idPessoa;
	}
	public int getIdPessoa(){
		return this.idPessoa;
	}
	public void setIdade(int idade){
		this.idade = idade;
	}
	public int getIdade(){
		return this.idade;
	}
	public void setPrimeiroNome(String primeiroNome){
		this.primeiroNome = primeiroNome;
	}
	public String getPrimeiroNome(){
		return this.primeiroNome;
	}
	public void setUltimoNome(String ultimoNome){
		this.ultimoNome = ultimoNome;
	}
	public String getUltimoNome(){
		return this.ultimoNome;
	}

}
<?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>
	<class name="versao2.Eventos" table="eventos">
		<id name="idEvento" column="idEvento" type="int" >
			<generator class="native" />
		</id>
		<property name="evento" />
		<property name="dataEvento" />
	</class>
</hibernate-mapping>
<?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>
 <class name="versao2.Pessoas" table="pessoas" >
 	<id name="idPessoa" column="idPessoa" type="int" >
 		<generator class="native" />
 	</id>
 	<property name="idade" />
 	<property name="primeiroNome" />
 	<property name="ultimoNome" />
 	
 	<set name="events" table="pessoaseventos" >
 		<key column="idPessoa" />
 		<many-to-many column="idEvento" class="versao2.Eventos" />
 	</set>	
 	
 	<set name="email" table="pessoasemails">
 		<key column="idPessoa" />
 		<element type="string" name="email" />
 	</set>
 	
 </class>
</hibernate-mapping>

Então, quanto executo:

GerenciadorEventos ge = new GerenciadorEventos();
	ge.adcionarPessoasEventos(2,1);

consigo inserir com sucesso o ID de um evento e o ID de uma pessoa na tabela pessoaseventos, porem quando executo:

GerenciadorEventos ge = new GerenciadorEventos();
	String b = ge.adcionarEmailPessoas(1,"[email removido]");
	out.println(b);

obtenho como resultado um nada animador:

Could not parse mapping document from resource versao2/Pessoas.hbm.xml

Já tentei de tudo, acho que estou cometendo algum erro muito tolo, mais fica ai minha dúvida e desde já meu agradecimento…

12 Respostas

ThiagoWorldCoder

Você deve ter colocado o seu hibernate.cfg em outro local provavelmente. Ou talvez a indicação de onde está o mapeamento do seu bean está errado!

felipeguerra
Aproveitando o ensejo, sou iniciante em Hibernate também, estou tentando persistir determinadas classes, só que a seguinte exceção é lançada:
org.hibernate.HibernateException: Unable to resolve property: idPessoa
	at org.hibernate.tuple.entity.EntityMetamodel.getPropertyIndex(EntityMetamodel.java:357)
	at org.hibernate.tuple.entity.AbstractEntityTuplizer.getPropertyValue(AbstractEntityTuplizer.java:286)
	at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyValue(AbstractEntityPersister.java:3534)
	at org.hibernate.type.EntityType.getIdentifier(EntityType.java:404)
	at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:78)
	at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1947)
	at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1924)
	at org.hibernate.persister.entity.AbstractEntityPersister$1.bindValues(AbstractEntityPersister.java:2102)
	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:32)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2108)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2588)
	at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:290)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:180)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:108)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
	at br.com.sofisa.HibTeste.main(HibTeste.java:53)
Minha classe de teste de persistência:
package br.com.sofisa;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class HibTeste {
	
	public static void main(String[] args) {
		Transaction t = null;
		
		try {
			Session session = HibernateUtil.getSession();
			
			t = session.beginTransaction();
			
			Usuario u = new Usuario();
			Endereco e = new Endereco();
			
			u.setNome(&quot;Teste Hibernate&quot;);
			u.setDtNascimento(new Date());
			u.setDtCadastro(new Date());
			u.setAtivo((byte)1);
			u.setCpf(&quot;[telefone removido]&quot;);
			u.setRg(&quot;005190007&quot;);
			u.setLogin(&quot;hibernate&quot;);
			u.setSenha(&quot;teste&quot;);

			e.setDescrEndereco(&quot;R. Hum, 100&quot;);
			e.setBairro(&quot;Luz&quot;);
			e.setCidade(&quot;São Paulo&quot;);
			e.setUf(&quot;SP&quot;);
			e.setCep(&quot;05018-001&quot;);
			e.setNumTelefone(&quot;([telefone removido]&quot;);
			e.setPessoa(u);
			
			u.setEndereco(e);
			
			//Perfeito
			Trajeto tra = (Trajeto) session.get(Trajeto.class, 1);
			Servico s = (Servico) session.get(Servico.class, 1);
			
			Carona car = new Carona();
			
			car.setHoraPartida(new Date(2000, 01, 01));
			car.setMaxPessoas(3);
			car.setServico(s);
			car.setTrajeto(tra);
			car.setObservacao(&quot;Teste Hibernate&quot;);
			car.setOferecedor(u);
			
			//Inserção perfeita
			session.save(u);
			
			//Aqui lança a exceção
			session.save(car);
			
			t.commit();
			
			session.close();
			
		}catch(Exception e) {
			t.rollback();
			e.printStackTrace();
		}
	}

}
HBMs
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;
&lt;hibernate-mapping&gt;

	&lt;class name="br.com.sofisa.Carona" table="CARONA"&gt;

		&lt;id name="idCarona" column="idCarona" type="integer"&gt;
			&lt;generator class="identity" /&gt;
		&lt;/id&gt;

		&lt;property name="maxPessoas" column="maxPessoas" type="integer" not-null="true" /&gt;
		&lt;property name="horaPartida" column="horaPartida" type="time" not-null="false" /&gt;
		&lt;property name="observacao" column="dcObservacao" type="string" not-null="false" length="200" /&gt;
		
		&lt;bag name="caronistas" table="CARONA_PESSOA"&gt;
			&lt;key&gt; 
				&lt;column name="idCarona" not-null="true" /&gt;
			&lt;/key&gt;
			&lt;many-to-many class="br.com.sofisa.Pessoa" column="idPessoa" foreign-key="idPessoa" /&gt;
		&lt;/bag&gt;

		&lt;many-to-one name="oferecedor"
					class="br.com.sofisa.Pessoa"
					property-ref="idPessoa"
					column="idPessoa"
					unique="false" 
					cascade="save-update"
					not-null="true" /&gt;

		&lt;many-to-one name="servico" 
					class="br.com.sofisa.Servico"
					property-ref="idServico"
					column="idServico"
					unique="false" 
					cascade="none" 
					not-null="true"
					insert="false" 
					update="false" /&gt;
		
		&lt;many-to-one name="trajeto" 
					column="idTrajeto" 
					not-null="true" 
					cascade="save-update" 
					class="br.com.sofisa.Trajeto" /&gt;
			
	&lt;/class&gt;

&lt;/hibernate-mapping&gt;



&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;
&lt;hibernate-mapping&gt;
	
	&lt;class name="br.com.sofisa.Pessoa" table="PESSOA"&gt;
	
		&lt;id name="idPessoa" column="idPessoa" type="java.lang.Integer"&gt;
			&lt;generator class="identity" /&gt;
		&lt;/id&gt;
		
		&lt;property name="nome" column="nome" not-null="true" type="string" length="200" /&gt; 
		&lt;property name="dtNascimento" column="dtNascto" not-null="true" type="date" /&gt;
		&lt;property name="rg" column="rg" not-null="false" type="string" length="15" /&gt;
		&lt;property name="cpf" column="cpf" not-null="false" type="string" length="11" /&gt;
		&lt;property name="celular" column="dcCelular" not-null="false" type="string" length="15" /&gt;
	
		&lt;one-to-one name="endereco" 
					class="br.com.sofisa.Endereco" 
					cascade="all" 
					foreign-key="idPessoa" 
					constrained="false" /&gt;
					
		&lt;bag name="caronas" table="CARONA_PESSOA" fetch="join"&gt;
			&lt;key&gt;
				&lt;column name="idPessoa" not-null="true" /&gt;
			&lt;/key&gt;
			&lt;many-to-many class="br.com.sofisa.Carona" column="idCarona" foreign-key="idCarona" /&gt;
		&lt;/bag&gt;
	
		&lt;joined-subclass name="br.com.sofisa.Usuario" extends="br.com.sofisa.Pessoa" table="USUARIO1"&gt;
			
			&lt;key column="idPessoa" not-null="true" foreign-key="idPessoa" unique="true" /&gt;
			
			&lt;property name="login" column="login" not-null="true" type="string" length="20" /&gt;
			&lt;property name="senha" column="senha" not-null="true" type="string" length="200" /&gt;
			&lt;property name="email" column="email" not-null="false" type="string" length="200" /&gt;
			&lt;property name="ativo" column="flagAtivo" not-null="true" type="byte" /&gt;
			&lt;property name="dtCadastro" column="dtCadastro" not-null="true" type="date" /&gt;
		
		&lt;/joined-subclass&gt;
	
	&lt;/class&gt;

&lt;/hibernate-mapping&gt;
V

No seu arquivo hibernate.cfg.xml mude o seguinte:

<element type="string" name="email" />

Para:

<element type="String" name="email" />

espero ter ajudado, flw.

felipeguerra

E no meu caso, o que eu faço!rs

V

rs! Não tinha visto seu post rs.

Se o seu idPessoa for Integer então mude essa linha:

<id name="idPessoa" column="idPessoa" type="java.lang.Integer">

Para:

<id name="idPessoa" column="idPessoa" type="Integer">

se for int substitua o Integer por int, pelo que entendi ele não ta conseguindo resolver o tipo.

espero ter ajudado, flw.

felipeguerra

Valdi:

espero ter ajudado, flw.

Quase, fiz o que disse e ainda não funcionou, o erro persiste!

Valeu

felipeguerra

A QUESTÃO chave é: o Hibernate aceita mais de um mapemento entre duas classes?

Perceba no meu HBM:

&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;
&lt;hibernate-mapping&gt;

	&lt;class name="br.com.sofisa.Carona" table="CARONA"&gt;

		&lt;id name="idCarona" column="idCarona" type="integer"&gt;
			&lt;generator class="identity" /&gt;
		&lt;/id&gt;

		&lt;property name="maxPessoas" column="maxPessoas" type="integer" not-null="true" /&gt;
		&lt;property name="horaPartida" column="horaPartida" type="time" not-null="false" /&gt;
		&lt;property name="observacao" column="dcObservacao" type="string" not-null="false" length="200" /&gt;
		
                //Muitos para muitos com 'Pessoa'
		&lt;bag name="caronistas" table="CARONA_PESSOA"&gt;
			&lt;key&gt; 
				&lt;column name="idCarona" not-null="true" /&gt;
			&lt;/key&gt;
			&lt;many-to-many class="br.com.sofisa.Pessoa" column="idPessoa" foreign-key="idPessoa" /&gt;
		&lt;/bag&gt;

                //Muitos para um com 'Pessoa' - Nesse caso específico, esse relacionamento serve para definir um owner
		&lt;many-to-one name="oferecedor"
					class="br.com.sofisa.Pessoa"
					property-ref="idPessoa"
					column="idPessoa"
					unique="false" 
					cascade="save-update"
					not-null="true" /&gt;

		&lt;many-to-one name="servico" 
					class="br.com.sofisa.Servico"
					property-ref="idServico"
					column="idServico"
					unique="false" 
					cascade="none" 
					not-null="true"
					insert="true" 
					update="false" /&gt;
		
		&lt;many-to-one name="trajeto" 
					column="idTrajeto" 
					not-null="true"
					unique="false" 
					cascade="save-update" 
					class="br.com.sofisa.Trajeto" /&gt;
			
	&lt;/class&gt;

&lt;/hibernate-mapping&gt;
G

Valdi:
No seu arquivo hibernate.cfg.xml mude o seguinte:

<element type="string" name="email" />

Para:

<element type="String" name="email" />

espero ter ajudado, flw.

Já fiz como no exemplo que você aprensentou, porem, não resolveu.

F

Gutemberg:
Valdi:
No seu arquivo hibernate.cfg.xml mude o seguinte:

<element type="string" name="email" />

Para:

<element type="String" name="email" />

espero ter ajudado, flw.

Já fiz como no exemplo que você aprensentou, porem, não resolveu.

Altere para “String” e altere a propriedade “name” para “column”, pois ela não se aplica ai.

G

Já consegui solucionar, agradeço a contribuição de todos os amigos. :idea:

felipeguerra

Alguém pode me ajudar?

felipeguerra

Não achei na documentação do Hibernate, então, se alguém já passou por isso, não exite em responder…

Criado 17 de janeiro de 2008
Ultima resposta 21 de jan. de 2008
Respostas 12
Participantes 5