es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for 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:

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
    

    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.

Comments are closed.