[RESOLVIDO]Problema Relacionamento OneToMany

Olá pessoal, estou com o seguinte problema:

Ai vai as classes correspondentes:

[code]package basicas;

import java.util.Date;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import util.ObjetoSistema;

@Entity
public class Projeto extends ObjetoSistema {

private String nome;
@OneToOne
@Cascade(CascadeType.ALL)
private Professor orientador;
@OneToOne
@Cascade(CascadeType.ALL)
private Equipe equipe;
private String descricao;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "projeto_expertises", joinColumns = { @JoinColumn(name = "id") }, inverseJoinColumns = { @JoinColumn(name = "id") })
@Cascade(CascadeType.ALL)
private List<Expertises> expertises;
private int status;
private Date dataInicio;
private Date dataFim;
@OneToMany(mappedBy = "projeto", fetch = FetchType.EAGER)
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
private List<Comentario> comentarios;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id", insertable = true, updatable = true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private List<Sprint> sprints;

public Projeto() {
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public Professor getOrientador() {
	return orientador;
}

public void setOrientador(Professor orientador) {
	this.orientador = orientador;
}

public Equipe getEquipe() {
	return equipe;
}

public void setEquipe(Equipe equipe) {
	this.equipe = equipe;
}

public String getDescricao() {
	return descricao;
}

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

public List<Expertises> getExpertises() {
	return expertises;
}

public void setExpertises(List<Expertises> expertises) {
	this.expertises = expertises;
}

public int getStatus() {
	return status;
}

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

public Date getDataInicio() {
	return dataInicio;
}

public void setDataInicio(Date dataInicio) {
	this.dataInicio = dataInicio;
}

public Date getDataFim() {
	return dataFim;
}

public void setDataFim(Date dataFim) {
	this.dataFim = dataFim;
}

public List<Comentario> getComentarios() {
	return comentarios;
}

public void setComentarios(List<Comentario> comentarios) {
	this.comentarios = comentarios;
}

public List<Sprint> getSprints() {
	return sprints;
}

public void setSprints(List<Sprint> sprints) {
	this.sprints = sprints;
}

}
[/code]

[code]package basicas;

import java.util.Date;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import util.ObjetoSistema;

@Entity
public class Comentario extends ObjetoSistema {

private String titulo;
@OneToOne
@Cascade(CascadeType.ALL)
private Pessoa autor;
private Date data;
private String comentario;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id", insertable = true, updatable = true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private List<Projeto> projetos;

public Comentario() {
}

public String getTitulo() {
	return titulo;
}

public void setTitulo(String titulo) {
	this.titulo = titulo;
}

public Pessoa getAutor() {
	return autor;
}

public void setAutor(Pessoa autor) {
	this.autor = autor;
}

public Date getData() {
	return data;
}

public void setData(Date data) {
	this.data = data;
}

public String getComentario() {
	return comentario;
}

public void setComentario(String comentario) {
	this.comentario = comentario;
}

public List<Projeto> getProjetos() {
	return projetos;
}

public void setProjetos(List<Projeto> projetos) {
	this.projetos = projetos;
}

}
[/code]

O engraçado é que fiz o mesmo relacionamento do mesmo jeito mudando só o mappedBy em outras classes e funciona de boa.

Se alguem souber, ajuda aew :slight_smile: !!!

Esqueci de dizer que o atributo “id” é criado pela classe que as 2 estendem (ObjetoSistema), ela cria o id com o @Id.

Vamos por partes.
Você não deveria utilizar um OneToMany em uma lista. Assim como não deve utilizar um ManyToOne ou ManyToMany em um atributo único.

Vamos considerar que eu tenho duas tabelas, pai e filho. Todo pai pode ter 0 ou muitos filhos. Todo filho pode ter apenas 1 pai biológico, mesmo que ele não assuma a responsabildiade.
Essa relação é 1 : N (um pai e vários filhos).
Neste caso, qual dos dois eu colocaria como OneToMany e qual colocaria como ManyToOne?

É a mesma natureza do teu problema.

Beleza amigo, acabei com o bendito, pro. O pro é que eu tava colocando tipo list onde num era ^_^.

Veja só, agora me apareceu o seguinte erro: mappedBy reference an unknown target entity property: basicas.Comentario.projeto in basicas.Projeto.comentarios.

Vai novamente as classes.

[code]package basicas;

import java.util.Date;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import util.ObjetoSistema;

@Entity
public class Projeto extends ObjetoSistema {

private String nome;
@OneToOne
@Cascade(CascadeType.ALL)
private Professor orientador;
@OneToOne
@Cascade(CascadeType.ALL)
private Equipe equipe;
private String descricao;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "projeto_expertises", joinColumns = { @JoinColumn(name = "id") }, inverseJoinColumns = { @JoinColumn(name = "id") })
@Cascade(CascadeType.ALL)
private List<Expertises> expertises;
private int status;
private Date dataInicio;
private Date dataFim;
@OneToMany(mappedBy = "projeto", fetch = FetchType.EAGER)
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
private List<Comentario> comentarios;
@OneToMany(mappedBy = "sprint", fetch = FetchType.EAGER)
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
private List<Sprint> sprints;

public Projeto() {
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public Professor getOrientador() {
	return orientador;
}

public void setOrientador(Professor orientador) {
	this.orientador = orientador;
}

public Equipe getEquipe() {
	return equipe;
}

public void setEquipe(Equipe equipe) {
	this.equipe = equipe;
}

public String getDescricao() {
	return descricao;
}

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

public List<Expertises> getExpertises() {
	return expertises;
}

public void setExpertises(List<Expertises> expertises) {
	this.expertises = expertises;
}

public int getStatus() {
	return status;
}

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

public Date getDataInicio() {
	return dataInicio;
}

public void setDataInicio(Date dataInicio) {
	this.dataInicio = dataInicio;
}

public Date getDataFim() {
	return dataFim;
}

public void setDataFim(Date dataFim) {
	this.dataFim = dataFim;
}

public List<Comentario> getComentarios() {
	return comentarios;
}

public void setComentarios(List<Comentario> comentarios) {
	this.comentarios = comentarios;
}

public List<Sprint> getSprints() {
	return sprints;
}

public void setSprints(List<Sprint> sprints) {
	this.sprints = sprints;
}

}
[/code]

[code]package basicas;

import java.util.Date;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import util.ObjetoSistema;

@Entity
public class Comentario extends ObjetoSistema {

private String titulo;
@OneToOne
@Cascade(CascadeType.ALL)
private Pessoa autor;
private Date data;
private String comentario;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id", insertable = true, updatable = true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private Projeto projetos;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id", insertable = true, updatable = true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private Sprint sprint;

public Comentario() {
}

public String getTitulo() {
	return titulo;
}

public void setTitulo(String titulo) {
	this.titulo = titulo;
}

public Pessoa getAutor() {
	return autor;
}

public void setAutor(Pessoa autor) {
	this.autor = autor;
}

public Date getData() {
	return data;
}

public void setData(Date data) {
	this.data = data;
}

public String getComentario() {
	return comentario;
}

public void setComentario(String comentario) {
	this.comentario = comentario;
}

public Projeto getProjetos() {
	return projetos;
}

public void setProjetos(Projeto projetos) {
	this.projetos = projetos;
}

public Sprint getSprint() {
	return sprint;
}

public void setSprint(Sprint sprint) {
	this.sprint = sprint;
}

}
[/code]

Perceba que você referencia apenas projeto, quando possui a propriedade projetos

    @OneToMany(mappedBy = "projeto", fetch = FetchType.EAGER)   
    @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)   
    private List<Comentario> comentarios;   
    @ManyToOne(fetch = FetchType.EAGER)   
    @JoinColumn(name = "id", insertable = true, updatable = true)   
    @Fetch(FetchMode.JOIN)   
    @Cascade(CascadeType.SAVE_UPDATE)   
    private Projeto projetos;   

Obrigado amigo, era isso mermo. Abração!