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

271
Views
Spring JPA: Insertar nueva entidad y referencia separada en cascada

Tengo dos clases de entidad Organización y Usuario con una relación de uno a muchos ( ¡Código Groovy para simplificar! ):

 @Entity class Organisation { @Id Long id String name @OneToMany List<User> users } @Entity class User { @Id Long id String username @ManyToOne(optional=false, cascade = CascadeType.Persist) Organisation organisation }

Cuando creo un nuevo usuario con una nueva organización todo funciona bien:

 def user = new User(organisation: new Organisation(...))

Pero cuando tomo una organización existente, la configuro en el atributo de organización para un nuevo usuario, aparece un error:

 def user = new User(organisation: organisationRepository.findOne(orgId)) userRepo.save(user)

Resultará en:

org.hibernate.PersistentObjectException: entidad separada pasada para persistir: Organización

Sé que no se puede llamar a persistir en una entidad separada. Pero en ese caso, dado que no cambio nada en la entidad de la organización en sí, pensé que hibernate lo permitiría.

Traté de poner cascade = {CascadeType.Persist, CascadeType.Merge} en la anotación ManyToOne , pero termina con el mismo error.

¿Lo que quiero archivar no es posible con hibernate o tengo un error de pensamiento en alguna parte?

about 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Ibas en la dirección correcta con:

 cascade = {CascadeType.Persist, CascadeType.Merge}

El problema es que cuando aún realiza la operación de save , el proveedor de persistencia intenta conectar en cascada la operación de persist , por lo que termina intentando persistir en la entidad de la Organización que ya tiene un @Id configurado y está desconectado.

Lo que tendría que hacer es merge en lugar de save .

En ese caso, la nueva entidad persistirá y la Organización se fusionará nuevamente en el contexto de persistencia, lo que permitirá que toda la operación sea exitosa.

Solo tenga en cuenta que cuando use la combinación y desee realizar operaciones en la entidad pasada después, deberá asignar el resultado a una nueva variable y realizar la operación en ella fe:

 User mergedUser = userRepo.merge(user); // operations on mergedUser from now on
about 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!