Aquí es cómo ponemos en práctica este funcionallity
Como puede ver, tenemos muchas aplicaciones (aquí se comporta como su sitio web).
Moderador, WebMaster y miembro, como se muestra en su mapeo, sería mejor como un rol. Qué sucede si necesita agregar un nuevo "Rol". Tal vez tienes que cambiar todo tu modelo.
Cada UserApplication (UserWebsite) tiene su fecha de inicio y finalización. Y cada aplicación tiene su propio rol. Un sitio web del Banco necesita un rol de Gerente. Un sitio web Health Insurance Company necesita un papel de agente y así sucesivamente ...
ACTUALIZACIÓN
entiendo el usuario/usuario (parte/todo) relación de composición. Antes de continuar, consulte este answer sobre Composición versus Agregación.
Pero lo que no entiendo es el propósito de las clases y de aplicación UserApplication
pensar en la solicitud como su sitio web. Trabajo para una gran compañía de seguros de salud donde tenemos muchos módulos (cada módulo (aplicación) tiene su propio sitio web). Pero algunos usuarios, no todos, pueden usar cada módulo. Explica por qué defino UserApplication. papel
de papel en este proceso de inicio de sesión
Ninguno. Simplemente le da a UserApplication un rol. Puedo usar el módulo financiero, que define los siguientes roles: Gerente, Cliente y Otro, donde puedo desempeñar el papel de Gerente.Pero puedo asignarle un usuario temporal (startDate y endDate) como cliente para usar el módulo financiero.
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);
Su sitio web parece
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);
Como se puede ver, webmaster, el moderador y miembro son sólo papeles definidos por su sitio web. Nada más.
Un buen recurso sobre UML y ORM es Java Persistence with Hibernate book.
Opps, debería haber dejado que Web_master heredara del moderador para que no tenga que volver a escribir la función delete_reg_member – Anthony