Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

181
Vistas
Eliminar huérfanos al eliminar la anotación principal manyToOne

Tengo dos entidades, relacionadas de la siguiente manera

 @Entity @Table(name = "APPOINTMENT") public class Appointment { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long codeAp; @ManyToOne(fetch = FetchType.EAGER) , @OnDelete(action = OnDeleteAction.CASCADE) @JoinColumn(name = "codeP") private Patient patient; //attributes //getters and setters //constructors @Entity @Table(name = "PATIENT") public class Patient { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long codeP; //attributes //getters and setters //constructors

Estoy usando el método de eliminación de JpaRepository. Hay una restricción entre las tablas PACIENTE y CITA en la base de datos, quiero eliminar huérfanos, cuando elimino Paciente. ¡Agregué la anotación de hibernación @OnDelete pero no funciona para mí! ¿Puedes decirme por qué? Quiero mantener esa relación unidireccional, ¿me pueden ayudar en esto?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Si desea seguir usando la asociación solo como unidireccional, puede definir el lado inverso con carga diferida en un campo sin exponer a los captadores y definidores:

 @Entity public class Patient { @OneToMany(mappedBy = "patient", orphanRemoval = true) private Collection<Appointment> appointments; }

De esta manera, la lógica de orphanRemoval de huérfanos se aplica de los pacientes a sus citas y, como beneficio adicional, obtiene la capacidad de navegar de los pacientes a las citas en las consultas HQL.

Observe el atributo mappedBy que indica que las citas son responsables de la administración de la asociación, por lo que continúa asociando citas con pacientes configurando pacientes en la relación de muchos a uno definida en Appointment .

over 4 years ago · Santiago Trujillo Denunciar

0

No hay forma de que pueda lograr ese comportamiento automático en el lado de @ManyToOne . Es simplemente semánticamente incorrecto, punto.

Sin embargo, teniendo en cuenta el hecho de que solo desea tener un mapeo unidireccional y no especificar la dependencia Set<Appointment> en el Patient , entonces una especie de solución a su situación sería reemplazar el @ManyToOne con un @OneToOne . Entonces podría usar la funcionalidad orphan-removal :

 @OneToOne(fetch = FetchType.EAGER, orphanRemoval=true) @JoinColumn(name = "codeP") private Patient patient;

Sin embargo, tenga en cuenta que si sigue este camino, adapte su código y, en algún momento, necesitará introducir la dependencia @OneToMany en el lado `Patient', entonces se encontrará con problemas. Por lo tanto, recomendaría resolver primero los pros y los contras en relación con la posible alteración futura del gráfico de entidades.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda