У меня есть этот код:
@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.
кто-нибудь знает почему?
ткс