Inserir usando ManyToMany

2 respostas
D

Olá pessoal, estou com um problema e não tenho ideia de como resolve-lo
Tenho duas entidades Professores e Matérias, então criei um relacionamento ManyToMany.
Como estou usando Hibernate gerei minhas tabelas automaticamente, criando assim uma terceira entidade chamada professores_materias.
Enfim, minha duvida é como inserir dados nessa entidade, pois não tenho uma classe modelo, muito menos uma classe Dao da mesma.
Obrigado por qualquer ajuda.

Segue abaixo as minhas classes.

Professores

package br.com.techfor.escola.model;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;

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

@Entity
public class Professores {

	@Id
	@GeneratedValue
	private Long id;

	private String nome;

	private String cpf;

	public Long getId() {
		return id;
	}
	
	@SuppressWarnings("deprecation")
	@ManyToMany
	@Cascade(value = {CascadeType.ALL, CascadeType.DELETE_ORPHAN})
	@JoinColumn(name = "id_materias")
	private List<Materias> materias;

	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

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

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public List<Materias> getMaterias() {
		return materias;
	}

	public void setMaterias(List<Materias> materias) {
		this.materias = materias;
	}
	

}

Matérias

package br.com.techfor.escola.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Materias {

	@Id
	@GeneratedValue
	private Long id;

	private String materia;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getMateria() {
		return materia;
	}

	public void setMateria(String materia) {
		this.materia = materia;
	}

}

ProfessoresBean

package br.com.techfor.escola.controller;

import java.util.ArrayList;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import br.com.techfor.escola.dao.MateriasDAOImpl;
import br.com.techfor.escola.dao.ProfessoresDAOImpl;
import br.com.techfor.escola.model.Materias;
import br.com.techfor.escola.model.Professores;

@Controller
public class ProfessoresBean {
	private Professores professores;
	private ProfessoresDAOImpl professoresDAOImpl;
	private MateriasDAOImpl materiasDAOImpl;
	private List<Professores> list;
	private List<Materias> listamaterias;
	private List<SelectItem> listasalvar;
	private Long id;

	public Professores getProfessores() {
		if (professores == null) {
			professores = new Professores();
		}
		return professores;
	}

	public void setProfessores(Professores professores) {
		this.professores = professores;
	}

	public ProfessoresDAOImpl getProfessoresDAOImpl() {
		return professoresDAOImpl;
	}

	@Autowired
	public void setProfessoresDAOImpl(ProfessoresDAOImpl professoresDAOImpl) {
		this.professoresDAOImpl = professoresDAOImpl;
	}

	public MateriasDAOImpl getMateriasDAOImpl() {
		return materiasDAOImpl;
	}

	@Autowired
	public void setMateriasDAOImpl(MateriasDAOImpl materiasDAOImpl) {
		this.materiasDAOImpl = materiasDAOImpl;
	}

	public List<Professores> getList() {
		if (list == null) {
			list = new ArrayList<Professores>();
		}
		list = professoresDAOImpl.listar();
		return list;
	}

	public void setList(List<Professores> list) {
		this.list = list;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public List<Materias> getListacompleta() {
		if (listamaterias == null) {
			listamaterias = new ArrayList<Materias>();
		}
		listamaterias = materiasDAOImpl.listar();
		return listamaterias;
	}

	public void setListacompleta(List<Materias> listamaterias) {
		this.listamaterias = listamaterias;
	}

	public List<SelectItem> getListaincompleta() {
		if (listasalvar == null) {
			listasalvar = new ArrayList<SelectItem>();
			for (Materias materias : this.getListacompleta()) {
				listasalvar.add(new SelectItem(materias.getId(), materias
						.getMateria()));
			}
		}
		return listasalvar;
	}

	public void setListaincompleta(List<SelectItem> listasalvar) {
		this.listasalvar = listasalvar;
	}

	public void Deletar() {
		String id = (String) FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap().get("id");
		professores = professoresDAOImpl.getBean(Professores.class, new Long(
				Long.parseLong(id)));
		professoresDAOImpl.delete(professores);
	}

	public void Alterar() {
		professoresDAOImpl.update(professores);
	}

	public void carrega() {
		String id = (String) FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap().get("id");
		this.professores = professoresDAOImpl.getBean(Professores.class,
				new Long(Long.parseLong(id)));
	}

	public void Salvar() {
		professoresDAOImpl.save(professores);
//		salvarMateria();
	}

//	public void salvarMateria() {
//		professores.getMaterias().addAll( listasalvar);
//	}

}

2 Respostas

drsmachado

Então, para fazer isto você vai precisar de um DAO, pelo menos, que aceite classes genéricas.
Como Materias é um atributo de Professor, a lista de Materias deverá ser inserida antes de Professor.

D

eu ja tenho essa classe genérica

package br.com.techfor.escola.dao;

import java.io.Serializable;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import br.com.techfor.escola.interfaces.GenericDAO;

public class GenericDAOImpl<T, PK> extends HibernateDaoSupport implements
		GenericDAO<T, PK> {

	private Class<T> classe;

	public GenericDAOImpl(Class<T> classe) {
		this.classe = classe;
	}

	@Override
	public void save(T bean) {
		getHibernateTemplate().save(bean);
	}

	@Override
	public void delete(T bean) {
		getHibernateTemplate().delete(bean);
	}

	@Override
	public void update(T bean) {
		getHibernateTemplate().update(bean);
	}

	@Override
	public void saveOrUpdate(T bean) {
		getHibernateTemplate().saveOrUpdate(bean);
	}

	@SuppressWarnings("unchecked")
	@Override
	public T getBean(Class<T> classe, PK pk) {
		T bean = (T) getHibernateTemplate().get(classe, (Serializable) pk);
		return bean;

	}

	@SuppressWarnings("unchecked")
	@Override
	public List<T> listar() {
		return this.getHibernateTemplate().loadAll(classe);
	}

}
Criado 22 de junho de 2011
Ultima resposta 27 de jun. de 2011
Respostas 2
Participantes 2