Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

176
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!