Как транзакции GWT RPC работают с JPA/Hibernate в базе данных?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как транзакции GWT RPC работают с JPA/Hibernate в базе данных?

Сообщение Anonymous »

Работая над этим огромным проектом сбора данных, созданным с помощью GWT (mariaDB as db), моя основная цель — заменить некоторые компоненты пользовательского интерфейса, а вместе с ними и их функциональные возможности (в данном случае управление пользователями, где вы можете добавлять/редактировать/перемещать), если быть честным, прямо сейчас я создаю острова в этом проекте, где я отделяюсь от GWT и использую для пользовательского интерфейса фреймворк Flutter (этот фреймворк выбран, потому что позже мы хотим иметь мобильную совместимость и один единая архитектура). На данный момент связь между Flutter и сервером осуществляется посредством вызовов API. Я стараюсь использовать практически без изменений функции, которые использует GWT, я просто беру их и пытаюсь реализовать в своем коде. Проблема в том, что есть одна функция, которая сохраняет/редактирует пользователей (да, она делает и то, и другое), и по некоторым причинам, когда она запускается конечной точкой (@PostMapping, @Transactional) ведет себя странно, я имею в виду, что когда вы пытаетесь изменить организацию пользователя, у этого пользователя есть некоторая область интересов (внешний ключ, нетерпеливая выборка, объявленная на сайтах, переменная внутри класса User), и когда он перемещается в другую организацию, его сайты будут перемещены. с ним тоже (сайты имеют внешний ключ организации). Когда функция (saveAndmoveSites), созданная (с помощью @Transactional) для извлечения сайтов редактируемого пользователя и перемещения их в новую организацию, вызывается функцией saveUser (которая вызывается flutter), по каким-то причинам вообще ничего не находит, ни одного сайта. Но когда все это запрашивает GWT, все нормально, найдет и переместит все сайты пользователя. Перед функцией saveAndMoveSites есть этот сопоставитель, где он сопоставляет DTO, полученный из запроса, с пользователем (используя MappedFacade), а на сайтах (область интереса) поле пусто (GWT отправляет пустое поле, flutter отправляет пустое поле). Я вижу, вызывается ли этот картограф флаттером до того, как saveAndMoveSites заставит серверную часть очистить сайты пользователей, и поэтому не найдет ни одного сайта при вызове saveAndMoveSites, но если вызывается GWT, картограф очистит сайты пользователя, но затем каким-то образом найдет их. Я очень удивлен этим странным поведением, и я хочу знать, как работают сеансы GWT (RPC) и управление состоянием гибернации, и почему эта функция ведет себя по-другому во Flutter.
В начале функции сделал эту отладочную печать, чтобы точно увидеть полученный DTO, чтобы увидеть различия между тем, что я отправляю из Flutter, и тем, что отправляет GWT. Я могу сказать, что совпадения 1:1, ничего не отличается друг от друга.

Чтобы решить эту проблему, я создал логическую переменную, которая будет проверять, вызывается ли функция флаттером, и если да, то не будет вызывать картограф перед saveAndMoveSites, но будет вызывать после этой функции. И пока все работает так, как задумано.

Подробнее здесь: https://stackoverflow.com/questions/797 ... a-database
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»