Opa pessoal,
eu tenho um relacionamento muitos para muitos e criei o mapeamento com jpa. O problema é que quando eu pego a lista do relacionamento, ele traz todos os registros com o campo nomeCurso vazio quando no banco tem valor.
O relacionamento é entre universidade e curso.
Universidade.java
@Entity
@Table( schema="client", name="universidade")
public class Universidade implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = "generator", sequenceName = "client.universidade_id_universidade_seq")
@GeneratedValue(generator = "generator")
@Column(name = "id_universidade", unique = true, nullable = false)
private int idUniversidade;
@Column(name = "nome", nullable = true, length = 200)
private String nome;
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.REFRESH}, fetch = FetchType.LAZY, mappedBy = "universidade")
private List<UniversidadeCurso> universidadeCurso;
public int getIdUniversidade() {
return idUniversidade;
}
public void setIdUniversidade(int idUniversidade) {
this.idUniversidade = idUniversidade;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public List<UniversidadeCurso> getUniversidadeCurso() {
return universidadeCurso;
}
public void setUniversidadeCurso(List<UniversidadeCurso> universidadeCurso) {
this.universidadeCurso = universidadeCurso;
}
}
curso.java
@Entity
@Table( schema="client", name="curso")
public class Curso implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = "generator", sequenceName = "client.curso_id_curso_seq")
@GeneratedValue(generator = "generator")
@Column(name = "id_curso", unique = true, nullable = false)
private int idCurso;
@Column(name = "nome", nullable = false, length = 100)
private String nomeCurso;
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.REFRESH}, fetch = FetchType.LAZY, mappedBy = "curso")
private List<UniversidadeCurso> universidadeCurso;
public int getIdCurso() {
return idCurso;
}
public void setIdCurso(int idCurso) {
this.idCurso = idCurso;
}
public String getNomeCurso() {
return nomeCurso;
}
public void setNomeCurso(String nomeCurso) {
this.nomeCurso = nomeCurso;
}
public List<UniversidadeCurso> getUniversidadeCurso() {
return universidadeCurso;
}
public void setUniversidadeCurso(List<UniversidadeCurso> universidadeCurso) {
this.universidadeCurso = universidadeCurso;
}
}
UniversidadeCurso.java
@Entity
@Table( schema="client", name="universidade_curso")
public class UniversidadeCurso implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = "generator", sequenceName = "client.universidade_curso_id_universidade_curso_seq")
@GeneratedValue(generator = "generator")
@Column(name = "id_universidade_curso", unique = true, nullable = false)
private int idUniversidadeCurso;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_universidade")
private Universidade universidade = new Universidade();
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_curso")
private Curso curso = new Curso();
public int getIdUniversidadeCurso() {
return idUniversidadeCurso;
}
public void setIdUniversidadeCurso(int idUniversidadeCurso) {
this.idUniversidadeCurso = idUniversidadeCurso;
}
public Universidade getUniversidade() {
return universidade;
}
public void setUniversidade(Universidade universidade) {
this.universidade = universidade;
}
public Curso getCurso() {
return curso;
}
public void setCurso(Curso curso) {
this.curso = curso;
}
}
O problema é o seguinte, eu pego a universidade selecionada pelo usuário e carrego em uma varíavel. Depois eu chamo uma lista que mostra todos os cursos da universidade, mas o nome do curso vem vazio. Eu fiz uma consulta somente em curso e funciona normal. O problema é no relacionamento.
public String setarUniversidade(String id){
uni = (Universidade) ConnectionFactory.getInstance().get(Universidade.class, Integer.parseInt(id));
return "";
}
uni.getUniversidadeCurso().get(i).getCurso(); <------------ o id vem com valor, mas o nome vem vazio