Spring Boot jpa cascade обновляет только первый обновленный элемент - PullRequest
0 голосов
/ 26 марта 2020

У меня есть этот код:

 @Transactional
    public void assinarArquivo(UUID codigoValidacao, ArquivoVo arquivoVo) throws MessagingException {
        Optional<Arquivo> arquivoOptional =arquivoRepository.findByPartes_codigoValidacao(codigoValidacao);
        if(arquivoOptional.isPresent()) {
            Arquivo arquivo = arquivoOptional.get();
            Parte parte = arquivo.getPartes().stream().filter(parteInterna -> codigoValidacao.equals(parteInterna.getCodigoValidacao()) ).findFirst().get();
            if(parte.getAssinatura() != null){
                throw new NotFoundException("Arquivo ja assinado pela parte em " + formatter.format(parte.getAssinatura()));
            }
            Arquivo arquivoNovo = ArquivoMapper.INSTANCE.mapToArquivo(arquivoVo);
            arquivo.setChecksum(arquivoNovo.getChecksum());
            arquivo.setConteudo(arquivoNovo.getConteudo());
            arquivo.setTamanho(arquivoNovo.getTamanho());
            parte.setAssinatura(LocalDateTime.now());
            verificaProximoAssinar(arquivo);
        }else {
            throw new NotFoundException("Arquivo não encontrado");
        }
    }

и

@Transactional(propagation = Propagation.REQUIRED)
    private void verificaProximoAssinar(Arquivo arquivo) throws MessagingException {
        Optional<Parte> parteOptional = arquivo.getPartes().stream().filter(parte -> parte.getAssinatura() == null).sorted(Comparator.comparingInt(Parte::getOrdem)).findFirst();
        if(parteOptional.isPresent()) {
            Parte parte = parteOptional.get();
            UUID codigoValidacao = UUID.randomUUID();
            parte.setCodigoValidacao(codigoValidacao);
            arquivoRepository.save(arquivo);
            enviarEmailProximoAssinar(arquivo, parte);
        }
    }

Когда я вызываю assinarArquivo, обновляется один элемент, и когда этот метод вызывает метод verificaProximoAssinar, он обновляет другой элемент, но когда Я сохраняю Arquivo, он обновляет только первый элемент

Это моя сущность Arquivo

...
@OneToMany(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
    @JoinColumn(name="arquivo_id")
    private List<Parte> partes;
...

в первом элементе я устанавливаю поле assinatura, а во втором элементе (внутри verificaProximoAssinar я устанавливаю codigoValidacao но в моей БД обновляется только поле assinatura, а в журнале гибернации он только регистрирует обновление от 1 элемента

Когда я отлаживаю в строке, в которой я сохраняю Arquivo, изменяются оба itens.

кто-нибудь знает почему?

ткс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...