Как мне отправить объект, содержащий другой объект, на сервер?

#hibernate #gwt #requestfactory

#переход в спящий режим #gwt #requestfactory

Вопрос:

Я разрабатываю приложение для сбора вопросов (название класса Question ) и ответов.

На моем клиенте есть набор радиокнопок, которые можно использовать для выбора предмета вопроса. Объекты (имя класса Subject ) хранятся в базе данных.

Для хранения в базе данных я использую спящий режим.

Итак, мой класс Question имеет свойство subject, которое имеет тип Subject

При сохранении вопроса я получаю идентификатор базы данных. Как я могу теперь сохранить соответствующий объект в базе данных?

Комментарии:

1. Ваш вопрос неясен. С этой проблемой вы столкнулись? : 1. Вы используете тот же класс (Question и Subject) на стороне браузера (GWT скомпилировал их в javascript), а также на стороне сервера те же классы имеют аннотации Hibernate (или XML-файлы hibernate) 2. Вы также хотите ОБРАТИТЬСЯ к соответствующей теме при сохранении вопроса в БД 3. Браузер заполняет новый объект Subject на основе выбора переключателя, и поэтому в режиме гибернации создаются новые записи Subject вместо ссылки на старые?

Ответ №1:

Предполагая, что мой комментарий ЯВЛЯЕТСЯ проблемой, с которой вы столкнулись,

В вашем случае у вас должно быть 2 отдельные версии вашей темы и вопроса.

Один набор — это DTO (объект передачи данных), в то время как другой набор — это постоянный набор классов. Классы DTO, SubjectDTO и классы QuestionDTO, являются GWT-скомпилированными и отправляются в браузер и из браузера с вызовами служб. QuestionDTO содержит введенный вопрос и выбранное имя темы с помощью переключателей в виде примитивных строк. Когда пользователь нажимает, чтобы сохранить вопрос, вы вызываете службу и отправляете QuestionDTO на сервер. Затем сервер выполняет поиск имени объекта в базе данных, извлекает из базы данных фактическую ранее существовавшую запись SubjectPersistent и помещает ее в новый QuestionPersistent вместе с фактической строкой, представляющей вопрос, введенный пользователем, и сохраняет его. Таким образом, вы ссылаетесь на существующую тему — при сохранении вопроса для темы создается фактический внешний ключ.

Выберите любую схему именования, которую вы хотите для DTO и постоянных классов (я назвал их моделями и доменами), но в конечном итоге они должны быть разделены, поскольку ваше приложение становится более сложным.