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();
disciplinaRN.salvarDisci(this.disciplina);
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!