Spring Data Jpa saveAndFlu sh метод не фиксирует сессию сразу - PullRequest
0 голосов
/ 17 марта 2020

У меня есть метод обслуживания, сохраняющий новую сущность, и мне нужен автоматически сгенерированный идентификатор, чтобы я мог go в последующих логах c, поэтому я использую метод saveAndFlu sh (). но что-то идентификатор не генерируется перед следующим кодом

    @Transactional(rollbackFor = Exception.class)
    public void method1() {

        User user = new User();
        User savedUser = userRepository.saveAndFlush(user);

        // according to the logs on event listener, the id of savedUser is sometimes null
        eventPublisher.publish(savedUser);
    }

, почему saveAndFlu sh не сохраняет в БД и не генерирует идентификатор перед отправкой события?

1 Ответ

0 голосов
/ 17 марта 2020

eventPublisher.publi sh (saveUser);

Эта строка кода находится в транзакции ==> @Transactional (rollbackFor = Exception.class)

сделать одно событие eventPublisher.publi sh (savedUser); запустите это в отдельном потоке

Используйте код ниже:

@Transactional(rollbackFor = Exception.class)
    public void method1() {
        ExecutorService executor = null;
        try {
            User user = new User();
            User savedUser = userRepository.saveAndFlush(user);

            executor = Executors.newFixedThreadPool(5);
            CompletableFuture.runAsync(() -> {
                // according to the logs on event listener, the id of savedUser is sometimes
                // null
                eventPublisher.publish(savedUser);
            }, executor);
        } finally {
            executor.shutdown();
        }
    }
...