HibernateUtil com ManyToMany

4 respostas
A

Pessoal,
Só acontece para as classes que possuem relacionamento.

Obrigado.

4 Respostas

A

Alguem pode me ajudar???
Estou tentando criar um HibernateUtil, estou tendo problema
com as classes que possuem relacionamento, segue abaixo o
meu codigo e erro.

Obs.: Para classes que não possuem relacionamentos funciona sem problema.

Estou usando Eclipse, Hibernate 3.1 com annotations.

HibernateUtil

import org.hibernate.*;
import org.hibernate.cfg.*;
import br.com.exemplo.cadastro.*;


public class HibernateUtil {
	private static final SessionFactory sessionFactory;

	static {
		try {
				sessionFactory = new AnnotationConfiguration()
							.addAnnotatedClass(CadNivel01.class)
							.buildSessionFactory();
				//.addResource("br/com/empresa/banco/orm.xml")

		} catch (Throwable ex) {
				// Log exception!
				throw new ExceptionInInitializerError(ex);
			}
	}
	
	public static Session getSession() throws HibernateException {
		return sessionFactory.openSession();
	}
}

ERRO - Este erro ocorre na execução da linha .buildSessionFactory();

Exception in thread "main" java.lang.ExceptionInInitializerError
	at br.com.exemplo.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:27)
	at br.com.exemplo.hibernate.Teste.main(Teste.java:22)
Caused by: org.hibernate.AnnotationException: Collection has neither generic type or OneToMany.targetEntity() defined: br.com.exemplo.cadastro.CadNivel01.cadNivel02s
	at org.hibernate.cfg.annotations.CollectionBinder.getCollectionType(CollectionBinder.java:486)
	at org.hibernate.cfg.annotations.CollectionBinder.bind(CollectionBinder.java:378)
	at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1473)
	at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:710)
	at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:452)
	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:268)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1283)
	at br.com.exemplo.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:22)
	... 1 more

CLASSE CadNivel01

package br.com.exemplo.cadastro;

// Generated 10/01/2007 14:10:43 by Hibernate Tools 3.2.0.beta8

import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * CadNivel01 generated by hbm2java
 */
@Entity
@Table(name = "CAD_NIVEL01", schema = "dbo", catalog = "WISE", uniqueConstraints = {})
public class CadNivel01 implements java.io.Serializable {

	// Fields    

	private int codnivel01;

	private String descricao;

	private Short status;

	private Set cadNivel02s = new HashSet(0);

	// Constructors

	/** default constructor */
	public CadNivel01() {
	}

	/** minimal constructor */
	public CadNivel01(int codnivel01) {
		this.codnivel01 = codnivel01;
	}

	/** full constructor */
	public CadNivel01(int codnivel01, String descricao, Short status,
			Set cadNivel02s) {
		this.codnivel01 = codnivel01;
		this.descricao = descricao;
		this.status = status;
		this.cadNivel02s = cadNivel02s;
	}

	// Property accessors
	@Id
	@Column(name = "codnivel01", unique = true, nullable = false, insertable = true, updatable = true)
	public int getCodnivel01() {
		return this.codnivel01;
	}

	public void setCodnivel01(int codnivel01) {
		this.codnivel01 = codnivel01;
	}

	@Column(name = "descricao", unique = false, nullable = true, insertable = true, updatable = true)
	public String getDescricao() {
		return this.descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	@Column(name = "status", unique = false, nullable = true, insertable = true, updatable = true)
	public Short getStatus() {
		return this.status;
	}

	public void setStatus(Short status) {
		this.status = status;
	}

	@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "cadNivel01")
	public Set getCadNivel02s() {
		return this.cadNivel02s;
	}

	public void setCadNivel02s(Set cadNivel02s) {
		this.cadNivel02s = cadNivel02s;
	}

}
D

É só definir o tipo de classe no Set&lt?&gt!!! Sendo:

private Set<NomeClasse> cadNivel02s

É isso ae!!! Falow

A

Vlw dders, agora o erro esta em utilizar o mappedBy nas duas classes, estou estudando para ver como posso solucionar este problema, sei que este tipo de relacionamento é meio complicado. Se voce puder me dar uma ajuda. O erro é referente a outra classe (Usuario/SegPerfil) mais é o mesmo problema ManyToMany.

Obrigado.

Exception in thread "main" java.lang.ExceptionInInitializerError
at br.com.wise.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:32)
at br.com.wise.hibernate.Teste.main(Teste.java:22)
Caused by: org.hibernate.AnnotationException: Illegal use of mappedBy on both sides of the relationship: br.com.empresa.cadastro.Segperfil.usuarios
at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:183)
at org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPass(CollectionBinder.java:1253)
at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1101)
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:567)
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:50
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:43)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1127)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:296)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1283)
at br.com.empresa.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:27)
... 1 more
A

Problema resolvido, a solução aplicada foi remover um dos mappedby.
Valeu galera.

Criado 23 de janeiro de 2007
Ultima resposta 24 de jan. de 2007
Respostas 4
Participantes 2