Skip to content

Latest commit

 

History

History

8-table-relations

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

Spring (OneToMany, ManyToOne, ManyToMany Relations)

Скачайте проект с http://assets.codeforces.com/files/6e78d88da1176e86/9d/wm5.7z Запустите проект (поправьте src/main/resources/application.properties). Используйте базы данных вида uXXd (в конце буква d) . Запуск создаст таблицы user, notice, role, user_role. Добавьте к ней колонку passwordSha, которая по-умолчанию NULL. Убедитесь, что работает - регистрация+вход+выход notice. Просмотр пользователей и переходы на страницы про notices выкидывают на /enter, из-за аннотаций уровня доступа. Добавьте роли с именами 0, 1 (это порядковые номера для enum) через phpMyAdmin. Создайте нескольких пользователей, дайте им разные права (просто руками добавьте записи в user_role). Полезный справочный ресурс https://en.wikibooks.org/wiki/Java_Persistence/Relationships

1.

Добавьте в класс Notice поле user (автора). И добавьте мэппинг many-to-one. Вам придется и модифицировать обратный мэппинг (поле User#notices). Прочтите по ссылке как сделать двунаправленный мэппинг many-to-one и one-to-many: https://en.wikibooks.org/wiki/Java_Persistence/OneToMany#Example_of_a_OneToMany_relationship_and_inverse_ManyToOne_annotations После этого в common.ftlh допишите в конце каждого Notice в сайдбаре “by ” (например, by mike).

2.

Добавьте сущность простейшую Comment с четырьмя полями id, text (используйте аннотацию @Lob), user, notice. Добавьте и List comments в User и Notice. Настройте двунаправленные мэппинги many-to-one и one-to-many. Сделайте простейшую страницу с отображением одного Notice и списка его комментариев под ним (по урлу /notice/{id}). Перед списком комментариев для залогинённого пользователя добавьте форму добавления нового комментария (просто одна textarea и кнопка). Пусть в сайдбаре ссылки View all ведут на индивидуальную страницу этого Notice.

3.

Добавьте сущность Tag (тег). У него есть только id и name. Теги должны находиться с Notice в отношении многие-ко-многим. Сделайте однонаправленный мэппинг многие-ко-многим, то есть поле Notice#tags. Надо делать по образу и подобию как связаны пользователи и роли. Добавьте руками несколько тегов (записи в таблицу tag) и несколько тегов к notices (записи в таблицу notice_tag). Отображайте список тегов и в сайдбаре и на отдельной странице для Notice.

4.

Добавьте поле Tags в форму создания Notice. Считайте, что туда надо ввести список тегов через пробельные символы (whitespaces). Валидируйте, если ввели что-то, что не является простым словом из латинских букв. При сохранении нового Notice надо сохранить его вместе с тегами (возможно, в таблице tag появятся новые записи, возможно будут использованы старые).