У меня возникла следующая проблема: я работаю над приложением весенней загрузки, которое предлагает услуги REST и использует реляционную (SQL) с использованием spring-data-jpa.Распространение Spring Transaction: не может получить связанные объекты @OneToMany при использовании одной и той же транзакции для создания и проведения консультаций
У меня есть две службы REST: - служба создания сущности, которая создает дочерний объект, родительский объект и связывает их в одной транзакции. Когда эта служба заканчивается, данные передаются в базу данных. - консультационная служба юридического лица, которая возвращает материнское предприятие со своими детьми
Эти две службы аннотируются аннотацией @Transactional. Это случай производства, он работает хорошо: я могу создать родительский объект со своими дочерними элементами в одной транзакции (которая завершена/завершена) и получить ее в другой транзакции последней.
Проблема в том, когда я хочу создать интеграционные тесты. Моя идея заключалась в том, чтобы аннотировать каждый тест с помощью аннотации @Transactional и выполнять откат после каждого теста. Таким образом, я сохраняю свою базу данных в чистоте между каждым тестом, и у меня нет сгенерации схемы снова или очистки всех записей в базе данных.
Интеграционный тест состоит в создании родительского элемента и его дочерних элементов, а затем его чтении - все в одной транзакции (поскольку тест аннотируется с помощью @Transaction). При чтении объекта, созданного ранее в той же транзакции, я могу получить родительский объект, но дети не выбраны (нулевое значение). Я не уверен, что очень хорошо разбираюсь в механизме транзакций: я думал, что с использованием @Transactional в методе тестирования службы (аннотированные с помощью «@Transactional»), вызванные этим тестом, должны обнаруживать и использовать ту же транзакцию, открытую тестом (распространение настроено на «ТРЕБУЕТСЯ»). Следовательно, поскольку транзакция использует тот же EntityManager, она должна иметь возможность возвращать связь между родительским объектом и его дочерними элементами, созданными ранее в одной и той же транзакции, даже если данные не были переданы в базу данных. Странно, что он извлекает родительский объект (который еще не был внесен в базу данных), но не его дочерние элементы. Правильно ли я понимаю концепцию транзакции? Если нет, может кто-нибудь объяснить мне, что мне не хватает?
Кроме того, если кто-то сделал что-то подобное, не мог бы он объяснить мне, как он это сделал?
Мой код довольно сложный. Сначала я хочу знать, хорошо ли я понимаю, как управляются транзакции, и если кто-то уже сделал что-то подобное. Если это действительно так, я могу отправить дополнительную информацию о моей реализации (как инициализируются менеджер транзакций и администратор сущности, объекты JPA, службы и т. Д.)