Dúvidas com DataModel

0 respostas
dcorteztec

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>
Criado 4 de janeiro de 2011
Respostas 0
Participantes 1