Hibernate + JPA

4 respostas
J

Eu estava utilizando o hibernate somente com xml e estava rodando normalmente.
Quando inseri as anotações do JPA começou a dar o seguinte erro:

org.hibernate.AnnotationException: Collection has neither generic type or OneToMany.targetEntity() defined: br.com.Classes.Curso.disciplinas
	at org.hibernate.cfg.annotations.CollectionBinder.getCollectionType(CollectionBinder.java:521)
	at org.hibernate.cfg.annotations.CollectionBinder.bind(CollectionBinder.java:417)
	at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1614)
       (...)

eu já inseri todos os jars que eu vi nos tutoriais e foruns.
Aqui estao as duas classes:

@Entity
@Table(name="disciplina")
public class Disciplina {
	
	@Id @GeneratedValue(strategy = GenerationType.SEQUENCE)
	@Column(name="id")
	private Integer id;
	
	@Column(name="ementa")
	private String ementa;
	
	@Column(name="nome")
	private String nome;
	
	@ManyToOne(cascade=javax.persistence.CascadeType.ALL)
	@JoinColumn(name="curso_id")
	private Curso curso;
       (...)
@Entity
@Table(name="curso")
public class Curso {
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE)
	@Column(name="id")
	private Integer id;
	
	@Column(name="nome")
	private String nome;
	
	@Column(name="descricao")
	private String descricao;
	
	@OneToMany(mappedBy="curso", fetch=FetchType.LAZY)
	@Cascade(org.hibernate.annotations.CascadeType.ALL)
	private Collection disciplinas;

espero que possam me ajudar…
valeu!!!

4 Respostas

leoramos

Opa! Faltou o targetEntity aqui

@OneToMany(mappedBy="curso", fetch=FetchType.LAZY, targetEntity=Curso.class) @Cascade(org.hibernate.annotations.CascadeType.ALL) private Collection disciplinas;

(acho que é daquele jeito pra declarar o targetEntity, mas é bom tu garantir…
E tu tá usando Collection… normalmente, pra esses casos, eu uso Set; pra mim é uma saída melhor.

Abraço!

J

Parece que estava faltando isso mesmo, mas agora ele dá
outro erro:

org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: br.com.Classes.Curso.curso in br.com.Classes.Curso.disciplinas
bronx

Está faltando o atributo “curso” dentro da tua classe Curso, o qual está sendo referido no “mappedBy”.

J

Consegui era pq o targetEntity="" tem q apontar para a outra classe
entao Curso aponta para Disciplina e Disciplina apontando para Curso.
Ai rodou…

valeu pela ajuda!!

abraço!!

Criado 2 de setembro de 2009
Ultima resposta 2 de set. de 2009
Respostas 4
Participantes 3