Данные не сохраняются в БД при вызове времени @PostPersist - PullRequest
0 голосов
/ 22 февраля 2020

Мне нужно отправить запрос в другой microService, как только объект будет создан в базе данных. Я отправляю только идентификатор объекта, поэтому другой microService должен снова вызвать db для получения информации с кучей других вещей.

Но, когда другой microService пытается найти запись, используя полученный идентификатор, он не может найти сохраненная запись в базе данных.

Я пробовал отладку, похоже, что запись не сохраняется, даже если вызван @postPersist. Он будет сохранен после выполнения @PostPersist.

Кто-нибудь может дать обходной путь для этого. Мне действительно нужно снова запросить базу данных, так как это пользовательское требование. Я использую mysql и пружинный ботинок

public class EmployeeListener {

    @PostPersist
    public void sendData(Employee employee){
        Long id = employee.getEmployeeId();
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.exchange("http://localhost:8081/service/employee"+id, HttpMethod.POST, null, String.class);

    }

}


@Entity
@EntityListeners(EmployeeListener.class)
public class Employee {
       //
}

1 Ответ

1 голос
/ 22 февраля 2020

@PostPersist аннотированный метод вызывается в одной и той же транзакции, и режим fla sh по умолчанию - AUTO, поэтому вы не видите запись в базе данных. Вам необходимо вызвать грипп sh:

@Component
public class EmployeeListener {

    @PersistenceContext
    private EntityManager entityManager;

    @PostPersist
    public void sendData(Employee employee){
        // Send it to database
        entityManager.flush();
        Long id = employee.getEmployeeId();
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.exchange("http://localhost:8081/service/employee"+id, HttpMethod.POST, null, String.class);

    }

}

Обратите внимание, что EmployeeListener должен быть компонентом, управляемым Spring.

...