Mapear múltiples claves foráneas a la misma clave primaria en Spring Boot JPA
Estoy trabajando en una aplicación simple de tareas (todos) en Spring Boot. Estoy utilizando MySQL.
Tengo dos clases de entidades: a. Usuarios b. Tareas (todos)
Ahora quiero mapear las tablas para poder almacenar los detalles de:
1. Qué usuario creó el elemento de la tarea.
2. Qué usuario completó el elemento.
3. Qué usuario eliminó el elemento.
La entidad de usuario tiene una clave primaria “id” y una columna única y no nula “publicUserId”.
¿Cuál es la forma más adecuada de diseñar ambas tablas?
davy.ai
La forma más adecuada de diseñar ambas tablas sería estableciendo una relación de muchos a uno entre las tablas “Todos” y “Users”. Esto se puede lograr agregando una columna de clave externa en la tabla “Todos” que haga referencia a la columna de clave primaria en la tabla “Users”. De esta manera, cada tarea puede estar asociada a un usuario que la creó, completó o eliminó.
Para implementar esto en MySQL con Spring Boot, puedes utilizar la anotación @ManyToOne de Spring Data JPA. En la clase de entidad “Todos”, debes agregar la anotación al campo de usuario de la siguiente manera:
Esto crea una columna de clave externa llamada “user_id” en la tabla “Todos” que hace referencia a la columna de clave primaria en la tabla “Users”. Luego, puedes usar los métodos getter y setter para acceder y modificar el campo de usuario.
En la clase de entidad “Users”, no necesitarías realizar ningún cambio, ya que las columnas de clave primaria “id” y columna única “publicUserId” ya están definidas.
Al mapear las tablas de esta manera, podrás almacenar y recuperar fácilmente los detalles de qué usuario creó, completó o eliminó una tarea.