Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

274
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda