Problema com relacionamento ManyToMany

1 resposta
A

Olá Pessoal,

Estou com um problema em um relacionamento ManyToMany,
Tenho uma Classe Disciplina e outra Professor, e preciso relacionar os Ids dessas classes em uma terceira tabela no banco que seria então disciplina_professor,
e o problema que estou tendo é que não salva de jeito nenhum e não me retorna erro nenhum, já não sei mais oque pode estar de errado, se alguém puder fazer
a gentileza de me ajudar eu agradeço muito, pois esse é o projeto do meu TCC, e não tenho ainda tanto domínio da linguagem,
segue os codigos,

O relacionamento na Classe Disciplina

@ManyToMany(cascade = CascadeType.ALL)
	@JoinTable(name = "disciplina_cadastroprofessor",
         joinColumns = @JoinColumn(name = "coddisciplina"),
         inverseJoinColumns = @JoinColumn(name = "codprofessor"))
	private Set<cadastroProfessor> professor;

Classe Professor

@ManyToMany(mappedBy = "professor", fetch=FetchType.EAGER)
	private Set<Disciplina> disciplina ;

Oque estou tentando fazer, ao cadastrar disciplina estou usando o componente p:selectOneMenu para listar os Professores já cadastrados, segue o código

<h:outputText value="Professor: " />
    <p:selectOneMenu value="#{disciplinaBean.disciplina.professor}"
           id="professor" converter="converter">
          <f:selectItem itemLabel="Selecione uma opção" itemValue="" />
          <f:selectItems value="#{professorBean.lista}" var="p"
              itemLabel="#{p.nomeProfessor}" itemValue="#{p}" />
    </p:selectOneMenu>

Ele lista certinho os professores, criei o converter da seguinte forma,

@FacesConverter("converter")
   
public class CategoriaConverter implements Converter{  
      
	public Object getAsObject(FacesContext ctx, UIComponent component, String value) {  
        if (value != null) {  
            return this.getAttributesFrom(component).get(value);  
        }  
        return null;  
    }  
  
    public String getAsString(FacesContext ctx, UIComponent component, Object value) {  
  
        if (value != null  
                && !"".equals(value)) {  
  
            baseCon entity = (baseCon) value;  
  
            // adiciona item como atributo do componente  
            this.addAttribute(component, entity);  
  
            Long professor = entity.getId();  
            if (professor != null) {  
                return String.valueOf(professor);  
            }  
        }  
  
        return (String) value;  
    }  
  
    protected void addAttribute(UIComponent component, baseCon o) {  
        String key = o.getId().toString(); // codigo da empresa como chave neste caso  
        this.getAttributesFrom(component).put(key, o);  
    }  
  
    protected Map<String, Object> getAttributesFrom(UIComponent component) {  
        return component.getAttributes();  
    }  
  
}

Acontece que quando preencho os dados do formulário e clico em salvar não acontece nada, nem mesmo tenho um erro como retorno,
não sei oque posso fazer, é possível persistir esses dados desta maneira que estou tentando? será que é preciso mudar meu método salvar de Disciplina?

ele está desta forma no controller,

public String salvarDisci() {

		DisciplinaRN disciplinaRN = new DisciplinaRN();
		ProfessorRN professorRN = new ProfessorRN();
		return this.destinoSalvarDisci;

	}

no DisciplinaRN

public void salvarDisci(Disciplina disciplina) {
		Integer codDisciplina = disciplina.getCodDisciplina();
		if (codDisciplina == null || codDisciplina == 0) {
			this.disciplinaDAO.salvarDisci(disciplina);
		} else {
			this.disciplinaDAO.atualizarDisci(disciplina);
		}
	}

Agradeço a atenção, se puderem me dar uma luz agradeço!

1 Resposta

mmaico

Quando você submete a disciplina e ela chega no metodo salvarDisci(Disciplina disciplina) , dentro o objeto disciplina tem um professor na lista?
Outra coisa, a disciplina esta sendo salva? só o relacionamento que não?

abraço!

Criado 16 de novembro de 2012
Ultima resposta 16 de nov. de 2012
Respostas 1
Participantes 2