Вот как мы реализуем эту функциональность
Как видите, у нас много приложений (здесь они ведут себя как ваш сайт).
Модератор, WebMaster и Member, как показано в вашем отображении, было бы лучше в качестве роли. Что произойдет, если вам нужно добавить новую «роль». Может быть, вы должны изменить всю свою модель.
У каждого UserApplication (UserWebsite) есть дата начала и окончания. И у каждого приложения есть своя роль. Веб-сайт Банка нуждается в роли менеджера. Веб-сайту медицинской страховой компании нужна роль агента и так далее ...
UPDATE
Я понимаю соотношение композиции логин / пользователь (часть / целое). Прежде чем продолжить, посмотрите этот ответ о композиции против агрегации.
Но что я не понимаю, так это назначение классов UserApplication и Application
Думайте о приложении как о вашем веб-сайте. Я работаю в крупной компании медицинского страхования, где у нас много модулей (у каждого модуля (приложения) есть свой веб-сайт). Но некоторые пользователи , не все, могут использовать каждый модуль. Это объясняет, почему я определяю UserApplication.
роль роли в этом процессе входа в систему
Отсутствует. Это просто дает UserApplication роль. Я могу использовать финансовый модуль, который определяет следующие роли: менеджер, клиент и другие, где я могу играть роль менеджера. Но я могу назначить временного пользователя (startDate и endDate) в качестве клиента для использования финансового модуля.
Application financialModule = new Application();
financialModule.addRole(new Role("Manager"));
financialModule.addRole(new Role("Customer"));
financialModule.addRole(new Role("Other"));
User arthur = new User(new Login("#####", "#####"));
arthur.setFirstName("Arthur");
arthur.setLastName("Ronald");
arthur.setEnabled(true);
UserApplication financialModuleUser = new UserApplication(new Period(new Date(), null));
financialModuleUser.setUser(arthur);
financialModuleUser.addRole(financialModule.getRoleByDescription("Manager"));
financialModule.addUserApplication(financialModuleUser);
Ваш сайт выглядит как
Website myWebsite = new Website();
myWebsite.addRole(new Role("Member"));
myWebsite.addRole(new Role("WebMaster"));
myWebsite.addRole(new Role("Moderator"));
User you = new User(new Login("#####", "#####"));
you.setFirstName("FirstName");
you.setLastName("LastName");
you.setEnabled(true);
UserApplication myWebsiteUser = new UserApplication(new Period(new Date(), null));
myWebsiteUser.setUser(you);
myWebsiteUser.addRole(myWebsite.getRoleByDescription("WebMaster"));
myWebsite.addUserApplication(myWebsiteUser);
Как видите, WebMaster, Moderator и Member - это просто роли , определенные вашим сайтом. Больше ничего.
Хорошим ресурсом об UML и ORM является Java Persistence с книгой Hibernate.