#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 и постоянных классов (я назвал их моделями и доменами), но в конечном итоге они должны быть разделены, поскольку ваше приложение становится более сложным.