Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Salvo com succeso, mas ao editar da o erro!

Olá, estou tendo que esta me fazendo quebrar a cabeça. Quando salvo um item que possui alguns relacionamentos @ManyToMany, ao salvar, a persistência ocorreu normalmente, mas quando é para editar o erro ocorre, e esta ocorrendo justamente nos relacionamentos. Segue os dois métodos e o erro que vou postar em partes:

// Lista todas as receitas
    @RequestMapping(value = "listAll{id}", method = { RequestMethod.GET,
            RequestMethod.POST }, produces = "application/json")
    public @ResponseBody ResponseEntity<DataTableMinhasReceitas> getListReceitas(
            HttpServletRequest request, String action, @PathVariable("id") Long id) {
        Map<String, String[]> map = request.getParameterMap();
        MinhasReceitas receitas = new MinhasReceitas();
        List<MinhasReceitas> listAllMinhasReceitas = receitasService.findAll();
DataTableMinhasReceitas dataTableMinhasReceitas = new DataTableMinhasReceitas();
        for (Entry<String, String[]> entry : map.entrySet()) {
            String key = entry.getKey();
            String[] values = entry.getValue()
            for (String valor : values) 
                System.out.println(key + " - " + valor);
            }
        }
        if(action == null){    
dataTableMinhasReceitas.setData(listAllMinhasReceitas);
dataTableMinhasReceitas.setRecordsFiltered(listAllMinhasReceitas.size());
dataTableMinhasReceitas.setRecordsTotal(listAllMinhasReceitas.size());
            return ResponseEntity.status(HttpStatus.OK).body(dataTableMinhasReceitas);
        } else if(action.contains("create")){    
            receitas = new MinhasReceitas();
            criarEditarAjax(action, id, map, receitas);
        } else if(action.contains("edit")){
            receitas = receitasService.findById(id);
            criarEditarAjax(action, id, map, receitas);
        }else if(action.contains("remove"))
            receitasService.delete(id);
        }            
        dataTableMinhasReceitas.setData(listAllMinhasReceitas);
        dataTableMinhasReceitas.setRecordsTotal(8);
        dataTableMinhasReceitas.setRecordsFiltered(7);
        dataTableMinhasReceitas.setDraw(5);
        return ResponseEntity.status(HttpStatus.OK).body(dataTableMinhasReceitas);
    }
    private void criarEditarAjax(String action, Long id, Map<String, String[]> map, MinhasReceitas receitas) {
        for (Entry<String, String[]> entry : map.entrySet()) {

            String key = entry.getKey();
            String[] values = entry.getValue();

            for (String valor : values) {

                System.out.println(key + " - " + valor);

                if (key.contains("descricaoReceita")) {
                    if (valor != null && !valor.isEmpty()) {
                        receitas.setDescricaoReceita(valor);
                    }
                }
                if (key.contains("dataReceita")) {
                    if (valor != null && !valor.isEmpty()) {
                        LocalDate data = LocalDate.parse(valor);
                        receitas.setDataReceita(data);
                    }
                }
                if (key.contains("valorReceita")) {
                    if (valor != null && !valor.isEmpty()) {
                        BigDecimal valorReceita = new BigDecimal(valor);
                        receitas.setValorReceita(valorReceita);
                    }
                } 
                if (key.contains("receitaCor")) {
                    if (valor != null && !valor.isEmpty()) {
                        String corReceita = valor;
                        receitas.setCor(corReceita);
                    }
                } 
                if (key.contains("pagamento")) {
                    if (valor != null && !valor.isEmpty()){
                        if(valor.equals("1")){
                            receitas.setPagamento(true);
                        }else if(valor.equals("0")){
                            receitas.setPagamento(false);
                        }
                    }
                } 
                if (key.contains("minhasContas")) {
                    MinhasContas mc = contasService.findByNome(valor);
                        if (valor != null && !valor.isEmpty()) {
                            receitas.setMinhasContas(Arrays.asList(mc));
                        }
                } 
                if (key.contains("tipoReceitas")) {
                    CatTipoReceitas tipoReceitas = tipoReceitasService.findByNome(valor);
                    if (valor != null && !valor.isEmpty()) {
                            receitas.setTipoReceitas(Arrays.asList(tipoReceitas));
                    }
                } 
                if (key.contains("etiquetas")) {
                    List<Etiquetas> ListEtiquetas = etiquetasServices.findByNome(valor);
                    if (valor != null && !valor.isEmpty()) {
                        receitas.setEtiquetas(ListEtiquetas);
                    }
                } 
                if (key.contains("receitaFixa")) {
                    if (valor != null && !valor.isEmpty()){
                        if(valor.equals("1")){
                            receitas.setReceitaFixa(true);
                        }else if(valor.equals("0")){
                            receitas.setReceitaFixa(false);
                        }
                    }
                }
                if (key.contains("receitaFixaQuantidade")) {
                    if (valor != null && !valor.isEmpty()) {
                        Integer recFixQuant = Integer.valueOf(valor);
                        receitas.setReceitaFixaQuantidade(recFixQuant);
                    }
                } 
                if (key.contains("repetirPorPeriodo")) {
                    if (valor != null && !valor.isEmpty()) {
                        receitas.setRepetirPorPeriodo(RepetirPorPeriodo.QUINZENAL);
                    }
                }
                if (key.contains("addObservacao")) {
                    if (valor != null && !valor.isEmpty()) {
                        receitas.setAddObservacao(valor);
                    }
                }
            }
        }
        if(action.contains("create"))
            receitasService.save(receitas);
        }
        if(action.contains("edit")){
            receitasService.updateAjax(receitas);
        }
    }
3 respostas

O ERRO:

11:09:00.168 [http-nio-8080-exec-9] DEBUG org.springframework.web.servlet.DispatcherServlet - Handler execution resulted in exception - forwarding to resolved error view: ModelAndView: reference to view with name 'errors/error'; model is {mensagem=Ocorreu um erro durante a operação, tente novamente!, url=http://localhost:8080/financeiro/receitas/listAll307, excecao=java.lang.UnsupportedOperationException}
java.lang.UnsupportedOperationException: null
    at java.util.AbstractList.remove(Unknown Source)
    at java.util.AbstractList$Itr.remove(Unknown Source)
    at java.util.AbstractList.removeRange(Unknown Source)
    at java.util.AbstractList.clear(Unknown Source)
    at org.hibernate.type.CollectionType.replaceElements(CollectionType.java:543)
    at org.hibernate.type.CollectionType.replace(CollectionType.java:697)
    at org.hibernate.type.TypeHelper.replace(TypeHelper.java:177)
    at org.hibernate.event.internal.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:407)
    at org.hibernate.event.internal.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:219)
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:192)
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:85)
    at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:876)
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:858)
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:863)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:1196)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:344)
    at com.sun.proxy.$Proxy58.merge(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:294)
    at com.sun.proxy.$Proxy58.merge(Unknown Source)
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:508)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:503)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:488)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61)
    ...

Oi Clerman, para a gente fica muito complicado ler esse código, é algo específico da sua aplicação que não temos nenhum conhecimento prévio. O que podemos ler mais é a exception e acho que está faltando um pedaço dela aí.. não tenha uma parte com um caused by? De todo jeito parece que uma lista que não pode ter elementos removidos está sendo acessada pelo hibernate... tem que dar uma fuçada aí para ver se você não criou e passou adiante tal lista.

solução!

Olá, resolvi o problema aqui!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software