Можно ли добавить параметр для текущей сессии hibernate и получить его в связанном компоненте, который добавлен как зависимость?

Есть веб-сервис на Spring, в котором при помощи hibernate event listener перехватываются различные события (insert/update/delete). Этот перехватчик вынесен в отдельный проект и подключается к веб-сервису в зависимостях. Мне необходимо в основном проекте для текущей сессии в одной транзакции установить некий параметр, который я бы смог получить в обработчике событий.

Пробовал установить через свойства EntityManager:

@Transactional
@RequiredArgsConstructor
@RestController
@RequestMapping("/test")
public class TestController {
    private final EntityManager entityManager;
    private final TestService service;

@PostMapping
public Long save(@RequestBody TestEntity entity) {
    entityManager.setProperty("TEST_PARAM", true);
    return service.save(entity).getId();
}

Но при перехвате события это свойство отсутствует:

@Component
@Transactional
public class TestEventListener implements PostInsertEventListener {
private final EntityManager entityManager;

...

    @Override
    public void onPostInsert(PostInsertEvent event) {
        if (Objects.equals(true, entityManager.getProperties().get("TEST_PARAM"))) {
            //do something
        }
    }
}

Почему так не выходит, если это всё происходит в одной транзакции? Есть ли какой-нибудь другой способ это сделать?


Ответы (1 шт):

Автор решения: cestlavie

Решил свою задачу другим способом: Создал бин, который создаётся на каждый новый запрос и по завершению уничтожается:

public class SessionAttributes extends HashMap<String, Object> {
}

@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST,
        proxyMode = ScopedProxyMode.TARGET_CLASS)
public SessionAttributes requestAttributes() {
    return new SessionAttributes();
}

И далее просто выполняю инъекцию там, где мне это необходимо

→ Ссылка