Boa tarde, tenho uma dúvida eu tenho esse método que lista de uma entidade chamada Curso
public DataModel getListaCurso() {
cursos = repositorio.list();
listacurso = new ListDataModel(cursos);
return listacurso;
}
funciona na boa, agora como posso listar resultados de outra entidade que esta com relacionamento many to many
Uma Exemplo: Quero que retorne o nome da disciplina ao qual o Curso esta relacionado.
Método list()
public List<Curso> list() {
EntityManager em = (EntityManager) JPAUtil.getInstance()
.createEntityManager();
try {
Query query = em.createQuery("select c from Curso c inner join fetch c.disciplinas");
em.getTransaction().commit();
return query.getResultList();
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
Entidade Curso
package br.com.universidade.entidades;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
@NamedQueries({
@NamedQuery(name = "getCurso.Discplina", query = "select c from Curso c inner join fetch c.disciplinas where c.nome like ?1"),
@NamedQuery(name="getCurso.Prepara",query="select c from Curso c inner join fetch c.disciplinas")
})
@Entity
public class Curso {
@Id
@GeneratedValue
private Long idCurso;
private String nome;
private String descricao;
private int duracao;
@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.REMOVE })
@JoinTable(name = "curso_disciplina", joinColumns = { @JoinColumn(name = "idCurso") }, inverseJoinColumns = { @JoinColumn(name = "idDisciplina") })
private Set<Disciplina> disciplinas;
public Set<Disciplina> getDisciplinas() {
return disciplinas;
}
public void setDisciplinas(Set<Disciplina> disciplinas) {
this.disciplinas = disciplinas;
}
public Long getIdCurso() {
return idCurso;
}
public void setIdCurso(Long idCurso) {
this.idCurso = idCurso;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public int getDuracao() {
return duracao;
}
public void setDuracao(int duracao) {
this.duracao = duracao;
}
}
Entidade Disciplina
package br.com.universidade.entidades;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
@NamedQueries({
@NamedQuery(name = "getDisciplina", query = "select d from Disciplina d inner join fetch d.cursos as c where c.nome like ?1 "),
@NamedQuery(name = "getDisciplina_Curso", query = "select d from Disciplina d inner join fetch d.cursos as c ")
})
@Entity
public class Disciplina {
@Id
@GeneratedValue
private Long idDisciplina;
private String nome;
@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.MERGE,
CascadeType.REMOVE })
@JoinTable(name = "curso_disciplina", joinColumns = { @JoinColumn(name = "idDisciplina") }, inverseJoinColumns = { @JoinColumn(name = "idCurso") })
private Set<Curso> cursos;
public Set<Curso> getCursos() {
return cursos;
}
public void setCursos(Set<Curso> cursos) {
this.cursos = cursos;
}
public Long getIdDisciplina() {
return idDisciplina;
}
public void setIdDisciplina(Long idDisciplina) {
this.idDisciplina = idDisciplina;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
Index.xhtml
<h:form>
<h:dataTable var="curso" value="#{cursoBean.listaCurso}">
<f:facet name="header">
<h:outputText value="Curso" />
</f:facet>
<h:column>
<f:facet name="header">
<h:outputText value="Código" />
</f:facet>
<h:outputText value="#{curso.idCurso}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Nome" />
</f:facet>
<h:outputText value="#{curso.nome}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Descrição" />
</f:facet>
<h:outputText value="#{curso.descricao}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Duração" />
</f:facet>
<h:outputText value="#{curso.duracao}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Disciplina" />
</f:facet>
<h:outputText value="#{cursoBean.disciplinas.nome}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Excluir" />
</f:facet>
<h:commandButton action="#{cursoBean.excluirCurso}" value="Excluir" onclick="javascript:return(confirm('Tem certeza q vai DELETAR ?'))"/>
<h:commandButton action="#{cursoBean.preparAlterarCurso}" value="Alterar"/>
</h:column>
</h:dataTable>
</h:form>