4
respostas

Problema com persist e merge

eu posso uma query que faz a validação no banco se a data e o id de usuário existem porem sempre que vou realizar a logica ele faz persist em vez de merge gostaria de saber se os codigos, estao errado ou algo do tipo abaixo os dois codigos o da query e o da logica espero que me ajudem.

@Override
    public Optional<Folha> findByDateAndUser(LocalDate dataAtual, long idUser) {

        StringBuilder jpql = new StringBuilder();

        jpql.append(" select folha from Folha folha");
        jpql.append(" where folha.data = :dataAtual and folha.usuario = " + idUser + " ");

        TypedQuery<Folha> query = entityManager.createQuery(jpql.toString(), Folha.class);

        query.setParameter("dataAtual", dataAtual);

        return Optional.ofNullable(DAOUtil.getSingleResult(query));
    }


 Optional<Folha> findDateUser = folhaService.findByDateAndUser(novaFolha.getData(), novaFolha.getIdUser());
     if (novaFolha.getData() == null) {

            novaFolha.setData(data);
            novaFolha.setUsuario(usuario);
            folhaDAO.persistir(novaFolha);

        } else if(novaFolha.getData() != null){

            novaFolha.setEntrada(entrada);
            folhaDAO.update(novaFolha);


        } else if (novaFolha.getEntrada() != null){

            novaFolha.setSaidaAlmoco(saidaAlmoco);
            folhaDAO.update(novaFolha);
        }
4 respostas

pareceu que a sua logica estava coerente.. so nao vi o uso da variavel => findDateUser

Folha novaFolha = new Folha(); List findDateUser = folhaService.findByDateAndUser(novaFolha.getData(), novaFolha.getIdUser());

if (findDateUser.iterator().next().getData().equals(null)) {

novaFolha.setData(data); novaFolha.setUsuario(usuario); folhaDAO.persistir(novaFolha);

} else if(novaFolha.getEntrada() == null){

novaFolha.setEntrada(entrada); folhaDAO.update(novaFolha); } else if (novaFolha.getEntrada() != null){

novaFolha.setSaidaAlmoco(saidaAlmoco); folhaDAO.update(novaFolha); }

fiz o uso da variavel porem ocorreu um novo problema nesse cenario ele ignora o primeiro teste logico e ja passa direto para o segundo mesmo o data sendo null no banco o que posso modificar para solucionar esse problema.

se ele igonora o primeiro teste, eh pq a data nao esta nula.. nao existe outra possibilidade. Comparacao de nulo eh mais normal vc fazer com ==.. ate pq, se a data estivesse nula daria nullpointer nesse seu teste...

Então Alberto depois de alguns teste o resultado esta sendo nullpointer mesmo como poderia resolver isso tem alguma ideia ?