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.

Guardando en una sola ejecución dos padres y un hijo Spring JPA

Nunca he tenido un caso en el que quiera guardar varios padres y un hijo de una sola vez. En mi caso, tengo dos entidades padre y un hijo. Las dos entidades padre tienen una clave externa en la entidad hijo.

Tengo un ejemplo como este ->

@Entidad
@Tabla(“parentA”)
public class ParentA
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long ID;

@OneToMany(cascade = CascadeType.ALL, mappedBy=”parentA”)
private List child;

// Getters y Setters y algunos métodos
}

@Entidad
@Tabla(“ParentB”)
public class ParentB
{

@Column(“CODE”)
private Long code;

@OneToMany(cascade = CascadeType.ALL, mappedBy=”parentB”)
private List child;

// Getters y Setters y algunos métodos}

@Entidad
@Tabla(“Child”)
public class Child
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(“ID”)
private Long ID;

@Column(“parentA_ID”)
private Long parentAId;

@Column(“code”)
private String code;//from parentB

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = “ID”, referencedColumnName = “parentA_ID”)
private ParentA parentA;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = “code”, referencedColumnName = “code”)
private ParentB parentB;
// Getters y Setters y algunos métodos}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Si desea guardar varias entidades ParentA y ParentB junto con su entidad Child asociada, puede seguir el siguiente enfoque:

    1. Cree las entidades ParentA y ParentB junto con sus respectivas entidades Child y establezca sus valores de clave externa.
    // Creando la entidad ParentA con su Child
    ParentA parentA = new ParentA();
    Child child1 = new Child();
    child1.setParentAId(parentA.getId());
    parentA.setChild(Collections.singletonList(child1));
    
    // Creando la entidad ParentB con su Child
    ParentB parentB = new ParentB();
    Child child2 = new Child();
    child2.setCode(parentB.getCode());
    parentB.setChild(Collections.singletonList(child2));
    
    1. Guarde primero las entidades Child y luego asígneles sus respectivas entidades Parent. Luego, guarde las entidades Parent utilizando los métodos apropiados del repositorio de Spring Data JPA.
    // Guardando las entidades Child
    childRepository.saveAll(Arrays.asList(child1, child2));
    
    // Asignando las entidades Child a sus respectivos padres
    parentA.setChild(Collections.singletonList(child1));
    parentB.setChild(Collections.singletonList(child2));
    
    // Guardando las entidades Parent
    parentARepository.save(parentA);
    parentBRepository.save(parentB);
    

    Nota: Dado que la entidad Child tiene claves externas tanto a las entidades ParentA como a las ParentB, es necesario guardar primero las entidades Child antes de guardar las entidades Parent.

Comments are closed.