A logica é que uma pessoa é um funcionario e vice versa e um funcionario pode esrar em uma ou muitas comissões.
Eu imagino que em membroComissao eu deva ter um List e não uma unica pessoa , certo?
mas como ficaria o mapeamento? não trabalho com hibernate e estou estudando agora o assunto.
public String incluir() {
MembroComissao membroComissao = new MembroComissao();
for (Funcionario membro : listaMembros) {
membroComissao.setPessoa(membro.getPessoa());
membroComissao.setStMembroComissao(membro.getStMembroComissao);
membroComissao.setCsAtribuicao(true);
membroComissao.setDataInclusao(new Date());
membroComissaoDAO.alterar(membroComissao);
}
membroComissaoDAO.flush();
addMsgSucesso("Membro(s) Cadastrado(s) com Sucesso");
listaMembros = (Collection<Funcionario>) membroDAO.listaTodosMembros();
visualizarLabelPessoas = false;
return mostrarTelaIncluir();
}
Rafael_Guerreiro
Posta a classe inteira. Me ajuda a te ajudar.
D
diogobsb
Obrigado pela força segue a classe…so lembrando é um sistema que esta sendo migrado e ta muito zuado mesmo, mas a ideia é so funcionar e mandar pra frente…
importjava.util.ArrayList;importjava.util.Collection;importjava.util.Date;importjava.util.HashSet;importjava.util.Set;importjavax.faces.application.FacesMessage;importjavax.faces.context.FacesContext;importorg.jboss.seam.ScopeType;importorg.jboss.seam.annotations.Begin;importorg.jboss.seam.annotations.Create;importorg.jboss.seam.annotations.In;importorg.jboss.seam.annotations.Name;importorg.jboss.seam.annotations.Scope;importbr.gov.mi.seam.fw.mb.AbstractCrudMB;importbr.gov.mi.sispad.dao.MembroComissaoDAO;importbr.gov.mi.sispad.dao.MembroDAO;importbr.gov.mi.sispad.dao.MembroService;importbr.gov.mi.sispad.dao.PessoaFisicaDAO;importbr.gov.mi.sispad.entidade.MembroComissao;importbr.gov.mi.sispad.entidade.corp.rhmi.Funcionario;@Name("membroMB")@Scope(ScopeType.CONVERSATION)publicclassMembroMBextendsAbstractCrudMB{privateCollection<Funcionario>listaMembros=newArrayList<Funcionario>();privateCollection<Funcionario>listaPessoas=newArrayList<Funcionario>();privateCollection<Funcionario>listaMembrosExcluidos=newArrayList<Funcionario>();privateSet<Funcionario>listaPessoasSelecionadas=newHashSet<Funcionario>();privateCollection<Funcionario>listaPessoaMembro=newArrayList<Funcionario>();privateCollection<Funcionario>listaFuncionarios=newArrayList<Funcionario>();@InMembroDAOmembroDAO;@InMembroServicemembroService;@InPessoaFisicaDAOpessoaFisicaDAO;@InMembroComissaoDAOmembroComissaoDAO;privateFuncionariomembro=newFuncionario();privateFuncionariopessoaFisica=newFuncionario();privateStringnome;privateStringsiape;privateBooleanvisualizarBtn=false;privateBooleanvisualizarLabelPessoas=false;@OverridepublicStringurlManter(){return"/pages/administracao/membro/manterMembro";}@OverridepublicStringurlDetalhar(){returnnull;}@OverridepublicStringurlIncluir(){return"/pages/administracao/membro/incluirMembro";}@OverridepublicStringurlAlterar(){returnnull;}@OverridepublicStringmostrarTelaAlterar(){returnurlAlterar();}@OverridepublicStringmostrarTelaDetalhar(Objectentidade){returnurlDetalhar();}publicvoidpesquisarPessoaFisica(){if(nome==""&&siape==""){FacesContextcontext=FacesContext.getCurrentInstance();context.addMessage(null,newFacesMessage(FacesMessage.SEVERITY_INFO,"Pelo menos um campo deve ser preenchido para efetuar a pesquisa",""));}else{pessoaFisica=newFuncionario();pessoaFisica.setNmFuncionario(nome);pessoaFisica.setNrMatriculaSiape(siape);listaPessoas=pessoaFisicaDAO.buscarPessoaFisica(pessoaFisica);visualizarLabelPessoas=true;nome="";siape="";}}publicvoidadicionarListaPessoaMembro(){if(pessoaFisica.getNrMatriculaSiape()!=null){booleanexisteMembro=membroDAO.existeMembro(pessoaFisica.getPessoa().getIdPessoa());if(!listaPessoasSelecionadas.contains(pessoaFisica)&&existeMembro==false){membro.setIdFuncionario(pessoaFisica.getIdFuncionario());listaMembros.add(pessoaFisica);listaPessoasSelecionadas.add(pessoaFisica);}else{addMsgError("Membro Já Incluído ou Cadastrado");}}else{addMsgError("É necessário que a pessoa possua matrícula no SIAPE");}membro=newFuncionario();}@SuppressWarnings("unchecked")publicvoidremoverPessoaMembro(){System.out.println(membro.getNmFuncionario());System.out.println(membro.getIdFuncionario());//if(((Collection<Funcionario>) membro.getPessoa().getMembroComissao()).size() == 0){if(membro.getPessoa().getIdPessoa()==0){listaMembros.remove(membro);//listaPessoasSelecionadas.remove(membro.getPessoaFisica());membroDAO.excluir(membro);}else{addMsgError("O membro "+membro.getNmFuncionario()+" Não pode ser excluído pois ele está participando de uma comissão");}}publicCollection<Funcionario>getListaMembros(){returnlistaMembros;}publicvoidsetListaMembros(Collection<Funcionario>listaMembros){this.listaMembros=listaMembros;}publicFuncionariogetMembro(){returnmembro;}publicvoidsetMembro(Funcionariomembro){this.membro=membro;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetSiape(){returnsiape;}publicvoidsetSiape(Stringsiape){this.siape=siape;}publicCollection<Funcionario>getListaPessoas(){returnlistaPessoas;}publicvoidsetListaPessoas(Collection<Funcionario>listaPessoas){this.listaPessoas=listaPessoas;}publicSet<Funcionario>getListaPessoaMembrosAdd(){returnlistaPessoasSelecionadas;}publicvoidsetListaPessoaMembros(Set<Funcionario>listaPessoaMembrosAdd){this.listaPessoasSelecionadas=listaPessoaMembrosAdd;}publicFuncionariogetPessoaFisica(){returnpessoaFisica;}publicvoidsetPessoaFisica(FuncionariopessoaFisica){this.pessoaFisica=pessoaFisica;}publicBooleangetVisualizarBtn(){returnvisualizarBtn;}publicvoidsetVisualizarBtn(BooleanvisualizarBtn){this.visualizarBtn=visualizarBtn;}publicCollection<Funcionario>getListaPessoaMembro(){returnlistaPessoaMembro;}publicvoidsetListaPessoaMembro(Collection<Funcionario>listaPessoaMembro){this.listaPessoaMembro=listaPessoaMembro;}publicBooleangetVisualizarLabelPessoas(){returnvisualizarLabelPessoas;}publicvoidsetVisualizarLabelPessoas(BooleanvisualizarLabelPessoas){this.visualizarLabelPessoas=visualizarLabelPessoas;}publicCollection<Funcionario>getListaMembrosExcluidos(){returnlistaMembrosExcluidos;}publicvoidsetListaMembrosExcluidos(Collection<Funcionario>listaMembrosExcluidos){this.listaMembrosExcluidos=listaMembrosExcluidos;}@SuppressWarnings("unchecked")@Override@Begin(join=true)publicvoidfiltrarPesquisa(){listaMembros=(Collection<Funcionario>)membroDAO.listaTodosMembros();}publicStringincluir(){MembroComissaomembroComissao=newMembroComissao();for(Funcionariomembro:listaMembros){System.out.println(membro.getNmFuncionario());membroComissao.setPessoa(membro.getPessoa());membroComissao.setStMembroComissao(null);membroComissao.setCsAtribuicao(null);membroComissao.setDataInclusao(newDate());membroComissaoDAO.alterar(membroComissao);}membroComissaoDAO.flush();addMsgSucesso("Membro(s) Cadastrado(s) com Sucesso");listaMembros=(Collection<Funcionario>)membroDAO.listaTodosMembros();visualizarLabelPessoas=false;returnmostrarTelaIncluir();}@Override@Begin(join=true)@CreatepublicStringmostrarTelaIncluir(){listaMembros=(Collection<Funcionario>)membroDAO.listaTodosMembros();returnurlIncluir();}@OverridepublicStringalterar(){membroService.alterar(membro);returnnull;}@OverridepublicStringexcluir(){membroService.excluir(membro);filtrarPesquisa();returnnull;}}
Rafael_Guerreiro
Mas foi a classe MembroComissaoDAO que eu pedi, não a MembroMB…
Eu preciso ver como ela está implementada, pois esse erro pode estar acontecendo por causa da forma como ela é implementada.
D
diogobsb
então…repare que em membroComissao no metodo inluir eu recebo uma lista de membros(funcionarios) e faço um for…onde passo alguns dados para membroComissao.
a classe membroComissaoDAO apenas é usada para implementar o metodo abstrato de alterar.
Eu preciso saber como está o método alterar e flush.
D
diogobsb
são abstratos e não tenho acesso a eles…eu acho que vou escrever um metodo na mão mesmo…
Rafael_Guerreiro
Eu vou chutar então.
O problema pode ser pelo fato de você ter essa linha
MembroComissaomembroComissao=newMembroComissao();
O membroComissão que você criou não é um objeto conhecido pelo hibernate. Se você quer criar um novo, você deveria usar o método SALVAR. Algo assim:
for (Funcionario membro : listaMembros) {
MembroComissao membroComissao = new MembroComissao(); // UMA INSTANCIA NOVA POR VOLTA.
membroComissao.setPessoa(membro.getPessoa());
membroComissao.setStMembroComissao(membro.getStMembroComissao);
membroComissao.setCsAtribuicao(true);
membroComissao.setDataInclusao(new Date());
membroComissaoDAO.salvar(membroComissao);
}
membroComissaoDAO.flush();
save the transient instance before flushing: br.gov.mi.sispad.entidade.MembroComissao.comissao -> br.gov.mi.sispad.entidade.Comissao
SALVE a br.gov.mi.sispad.entidade.Comissao ANTES de SALVAR a br.gov.mi.sispad.entidade.MembroComissao
D
diogobsb
cara…eu vaiclei mesmo…o problema era um mapeamento dessa classe comissao que apontava pra classe membro…como a declaração do metodo em comissao estava no meio da classe eu não vi…obrigado pela ajuda e desculpe o vacilo! valeu