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.

¿Por qué la API de Persistencia de Java está generando ids basados en la cantidad total de entidades?

Estoy construyendo una API web que calcula un préstamo. Este préstamo tiene una lista de pagos:

@Entity
public class Loan {

@Id
@GeneratedValue
@Column(name = "id", nullable = false)
private Long id;

...

@OneToMany(cascade = CascadeType.ALL)
private List<payment> amortizationSchedule;

}

@Entity
public class Payment {
@Id
@GeneratedValue
private Long id;

}

Cuando almaceno estas entidades esperaría que las claves primarias se generaran de la siguiente manera:

  1. Préstamo creado, id generado = 1
  2. Préstamo creado, id generado = 2
  3. Pago creado, id generado = 1
  4. Pago creado, id generado = 2

En su lugar, ocurre lo siguiente:

  1. Préstamo creado, id generado = 1
  2. Préstamo creado, id generado = 2
  3. Pago creado, id generado = 3
  4. Pago creado, id generado = 4

¿Por qué pasa esto? ¿Y cómo puedo hacer que la API de Persistencia de Java base la generación de claves primarias en la cantidad de entidades de una clase específica en lugar de la cantidad total de entidades?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Esto está sucediendo porque la Java Persistence API está generando las claves primarias basándose en la cantidad total de entidades, en lugar de la cantidad de entidades de una determinada clase. Para hacer que la API base la generación de claves primarias en la cantidad de entidades de una determinada clase, se puede utilizar la anotación @TableGenerator. Esta anotación le permite especificar un nombre único para el generador, el nombre de la tabla que se utilizará para almacenar las claves primarias y el nombre de columna que se utilizará para almacenar las claves primarias. A continuación, se puede utilizar este generador para generar las claves primarias de las entidades de una determinada clase.

Comments are closed.