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.

Repositorio de la entidad ManyToMany problema de eliminación.

Tengo dos modelos: Evento y UsuarioNotificación.

Un Evento puede tener muchos Usuarios y un Usuario puede tener muchos Eventos. Construyo 2 modelos.

Evento

public class Evento {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String nombre;
@ElementCollection
private List<Acción> acciones;
private String descripción;
@ManyToMany
private List<UsuarioNotificación> usuarioNotificación;
}

UsuarioNotificación

public class UsuarioNotificación {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String correo electrónico;
private String nombre;
}

Puedo crear eventos y usuarios. También puedo eliminar eventos, pero no puedo eliminar usuarios. Recibo el siguiente mensaje:

la actualización o eliminación en la tabla “notification_user” viola la restricción de clave externa “fkjuklqmawfcf1ein89djo7945t” en la tabla “event_notification_user”
Detalle: La clave (id) = (12) todavía está referenciada en la tabla “event_notification_user”.

No entiendo las anotaciones para establecer en los modelos.

¿Hay una forma sencilla de manejar las relaciones? No quiero que mi repositorio se bloqueé por cosas simples como eliminaciones. Esa es la razón por la que uso JPARepository.

Gracias por su tiempo.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basándose en la información proporcionada, parece que está intentando eliminar un usuario del modelo NotificationUser, pero la operación de eliminación está siendo bloqueada debido a una restricción de clave externa. Esto es probablemente porque el usuario está asociado con uno o más eventos en el modelo Event.

    Para manejar esto, deberá actualizar las anotaciones en sus modelos para asegurarse de que se respete la restricción de clave externa. Específicamente, deberá agregar la anotación @ManyToMany al modelo Event, y la anotación @JoinTable al modelo NotificationUser. Esto asegurará que se respete la restricción de clave externa al eliminar un usuario.

    Por ejemplo:

    Event

    public class Event {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private long id;
        private String name;
        @ElementCollection
        private List<Action> actions;
        private String description;
        @ManyToMany
        private List<NotificationUser> notificationUser;
    }
    

    NotificationUser

    public class NotificationUser {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private long id;
        private String email;
        private String name;
        @ManyToMany
        @JoinTable(name = "event_notification_user", joinColumns = @JoinColumn(name = "notification_user_id"), inverseJoinColumns = @JoinColumn(name = "event_id"))
        private List<Event> events;
    }
    

    Al agregar las anotaciones @ManyToMany y @JoinTable, asegurará que se respete la restricción de clave externa al eliminar un usuario.

Comments are closed.