2
respostas

javax.persistence.EntityNotFoundException: Unable to find ...

Olá Estou tendo um erro ao tentar trazer os dados pelo find... via service e via repository de uma entidade para outra entidade dentro de um controller, ao trazer a lista e retorna o erro:

22:17:36.204 [http-nio-8080-exec-6] 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/definirGastos/enviaValor, excecao=javax.persistence.EntityNotFoundException: Unable to find br.com.clipboard.financeiro.entity.DefinirGastos with id 4}
javax.persistence.EntityNotFoundException: Unable to find br.com.clipboard.financeiro.entity.DefinirGastos with id 4
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$JpaEntityNotFoundDelegate.handleEntityNotFound(EntityManagerFactoryBuilderImpl.java:183)
    at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:219)
    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:275)
    at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:151)
    at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1070)
    at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:989)
    at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:716)
    at org.hibernate.type.EntityType.resolve(EntityType.java:502)
    at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:170)
    at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:144)
    at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.performTwoPhaseLoad(AbstractRowReader.java:244)
    at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishUp(AbstractRowReader.java:215)
    at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:140)
    org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:311)
    at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:141)
    at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573)
    at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449)
    org.springframework.transaction.interceptor.TransactionInterceptor$1.pro
2 respostas

Oi Clerman, olha, vou tentar o básico... Ele ta dizendo que não existe o objeto com id 4 no seu banco, você já conferiu?

Olá Alberto, no banco preciso persistir um objeto que vem da view, mas antes buscar uma lista, para o controller, onde faz o cálculo, do que vem da view e o resultado que vem na lista, para então persistir no banco. E o id não corresponde com o que quero persistir. Vou te postar o código do controller:

@RequestMapping(value = "/enviaValor", method = RequestMethod.POST, produces = "application/json")
    public @ResponseBody DefinirGastos salvarValor(@RequestParam() String idCat, @RequestParam() String idGastos, 
            @RequestParam() String valor, @AuthenticationPrincipal UsuarioLogado logado){

        Long idUser = logado.getId();
        Long idCateg = Long.valueOf(idCat);

        Usuario user = usuarioService.findById(idUser);

        //Busca a lista despesas -  esta lista não tem relacionamento com o objeto desse controller
        List<MinhasDespesas> listDespesas = despesasService.findByUsuarioByCatDespesas(user, idCateg);

        Long idGasto = Long.valueOf(idGastos);
        String valorRplComma = valor.replace(".", "");
        String valorRplDot = valorRplComma.replaceAll(",", ".");

        BigDecimal valorCast = new BigDecimal((String) valorRplDot);

        DefinirGastos definirGastos  = definirGastosService.findByIdUser(idGasto, idUser);

        BigDecimal ValorZero = new BigDecimal("0.00");
        BigDecimal getValor = BigDecimal.ZERO;
        BigDecimal getValor2 = new BigDecimal(300);
        BigDecimal valoPorcento = new BigDecimal(100);

        for(MinhasDespesas despesas : listDespesas){
            getValor = despesas.getValorDespesa();
            getValor2 = getValor2.add(getValor);
        }

        BigDecimal castValor2 = new BigDecimal((String) valorRplDot);
        BigDecimal valorDiv = castValor2.divide(getValor2, 4, BigDecimal.ROUND_CEILING);
        BigDecimal valorMulti = valorDiv.multiply(valoPorcento);

        definirGastos.setValor(valorCast);
        definirGastos.setPorcentagem(valorMulti);
        definirGastos.setNotificar(false);

        if(valorCast.equals(ValorZero)){
        }

        definirGastosService.salvar(definirGastos);

        return definirGastos;
    }

Tentei gravar um objeto com o id correspondente no banco, antes de persistir, e foi persistido com sucesso, mas não pode acontecer isso toda vez que se quer persistir um objeto, pode?