Erro de mapeamento com hibernate annotations

3 respostas
I

Pessoal preciso da ajuda de vcs.

Estou tendo problemas ao tentar iniciar uma sessão com o hibernate utilizando annotations. Ao executar um teste pra saber se está tudo correto aparece este erro: [color=red]Exception in thread “main” org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: Modelo.SerieDadosPib.dadosPibSerie[/color]

A pergunta é: Esqueci de algo ?

Abaixo estão as classes já anotadas e o código do programa principal. Tou fazendo a configuração no código pq vou ter que utilizar uma base de dados access pra uma aplicação pequena. Me ajudem aew pessoal, pq senão vou ter que voltar pro velho jdbc.

Valew

package Modelo;

import java.io.Serializable;
import java.util.ArrayList;
import javax.persistence.*;


@Entity
public class SerieDadosPib 
implements Serializable
{	
	private Integer idSerieDadosPib;	 
	private String descricao;	 
	private ArrayList<DadoPib> dadosPibSerie;
	
	
	@Id
	@GeneratedValue
	public Integer getIdSerieDadosPib()
	{
		return idSerieDadosPib;
	}
	
	public void setIdSerieDadosPib(Integer idSerieDadosPib)
	{
		this.idSerieDadosPib = idSerieDadosPib;
	}
		
	public String getDescricao()
	{
		return descricao;
	}
	
	public void setDescricao(String descricao)
	{
		this.descricao = descricao;
	}
	
	
	@OneToMany(mappedBy="serieDadosPib", cascade={ CascadeType.REMOVE })		
	public ArrayList<DadoPib> getDadosPibSerie()
	{
		return dadosPibSerie;
	}
	
	public void setDadosPibSerie(ArrayList<DadoPib> dadosPibSerie)
	{
		this.dadosPibSerie = dadosPibSerie;
	}
}
package Modelo;

import java.io.Serializable;
import javax.persistence.*;


@Entity
public class DadoPib 
implements Serializable
{
	private Integer idDadoPib;
	private Integer ano;
	private Double valor;
	private SerieDadosPib serieDadosPib;
	
	@Id
	@GeneratedValue	
	public Integer getIdDadoPib()
	{
		return idDadoPib;
	}

	public void setIdDadoPib(Integer idDadoPib)
	{
		this.idDadoPib = idDadoPib;
	}
	
	public Integer getAno()
	{
		return ano;
	}

	public void setAno(Integer ano)
	{
		this.ano = ano;
	}
	
	public Double getValor()
	{
		return valor;
	}

	public void setValor(Double valor)
	{
		this.valor = valor;
	}

	@ManyToOne
	@JoinColumn(name="idSerieDadosPib")
	public SerieDadosPib getSerieDadosPib()
	{
		return serieDadosPib;
	}

	public void setSerieDadosPib(SerieDadosPib serieDadosPib)
	{
		this.serieDadosPib = serieDadosPib;
	}
}
package Utils;

import Modelo.DadoPib;
import Modelo.SerieDadosPib;
import java.util.ArrayList;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

public class SessaoHibernate 
{	
	private Session session;
	private Transaction transaction;
	
	private static SessaoHibernate sessaoHibernate;	
	
	private SessaoHibernate()
	{
		String arquivoMdb = "C:\\Trabalho Sydney\\Software\\Fontes\\GraficoPIB\\db\\BaseDeDados.mdb";
				
		session = new AnnotationConfiguration()
							
			// Configurações para a conexão com o banco

			.setProperty("hibernate.connection.driver_class", "sun.jdbc.odbc.JdbcOdbcDriver")
			.setProperty("hibernate.connection.url", "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+arquivoMdb)
			.setProperty("hibernate.dialect", "com.hxtt.support.hibernate.HxttAccessDialect")
			// Configurações de mapeamento

			.addPackage("Modelo")
			.addAnnotatedClass(SerieDadosPib.class)	
			.addAnnotatedClass(DadoPib.class).configure().buildSessionFactory().openSession();
		
		
		//session = ac.buildSessionFactory().openSession();		
	}		

	// ... o resto da classe

}

E o programa principal

public static void main(String args[])
{
		
	SessaoHibernate sh = SessaoHibernate.getSessaoHibernate();
		
}

3 Respostas

L

Bom de diferente ai só tenho o nome do mapeamento para a classe.

E o fato de você mapear o método, você tentou mapear o atributo?

linha:40
@OneToMany(mappedBy=“serieDadosPib”, cascade={ CascadeType.REMOVE })

linha:14
private SerieDadosPib serieDadosPib;

I

leonardocregis:
Bom de diferente ai só tenho o nome do mapeamento para a classe.

E o fato de você mapear o método, você tentou mapear o atributo?

linha:40
@OneToMany(mappedBy=“serieDadosPib”, cascade={ CascadeType.REMOVE })

linha:14
private SerieDadosPib serieDadosPib;

cara, segundo o tutorial do hibernate, é pra mapear no método e não no atributo.

leandro.anjos

Tenta trocar o valor do parametro mappedBy pra “dadosPibSerie” que é o nome da sua variavel no Bean.

Não lembro direito se é assim, porque geralmente eu crio os Lists com o mesmo nome do objeto dai não preciso colocar o mappedBy.

Criado 21 de maio de 2008
Ultima resposta 21 de mai. de 2008
Respostas 3
Participantes 3