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.

Guardar una columna que está basada en la columna de clave primaria de forma simultánea en una tabla mediante JPA.

Tengo una tabla definida a continuación:

Columna Tipo Restricción
ID VARCHAR(36) primary key
CREATE_TIME BIGINT
RES_ID VARCHAR(64)
NOMBRE VARCHAR(255)
UPDATE_TIME BIGINT

, donde RES_ID se genera en función de ID.
Por ejemplo, si ID es ‘aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa’, entonces RES_ID es ‘res_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa’ donde ‘res_’ es una cadena constante.
Por ahora, si quiero guardar un nuevo registro, tengo que guardarlo dos veces porque ID es una cadena UUID generada automáticamente y solo si se determina el ID, se puede generar RES_ID y guardarlo en la base de datos.
¿Hay alguien que sepa cómo establecer una conexión entre ID y RES_ID, para que cuando escriba:

repository.save(record);

, tanto ID como RES_ID se llenen y guarden automáticamente y correctamente en la base de datos?
Cualquier persona que conozca esta pregunta, por favor dime.
¡Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible crear una conexión entre ID y RES_ID para que se generen y guarden automáticamente cuando se guarda un nuevo registro. Una forma de lograr esto es utilizando JPA (Java Persistence API), que es una especificación de Java para el mapeo objeto-relacional.

    Una posible solución sería modificar la clase entidad que corresponde a la tabla agregando un método anotado con @PrePersist que genere los valores de ID y RES_ID antes de que la entidad se persista. El método podría generar el UUID para ID utilizando la clase UUID y concatenarlo con la cadena constante “res_” para formar el valor de RES_ID.

    Aquí hay un fragmento de código de ejemplo:

    @Entity
    @Table(name = "mi_tabla")
    public class MiClase {
    
        @Id
        @Column(name = "ID", length = 36)
        private String id;
    
        @Column(name = "CREATE_TIME")
        private Long createTime;
    
        @Column(name = "RES_ID", length = 64)
        private String resId;
    
        @Column(name = "NOMBRE", length = 255)
        private String nombre;
    
        @Column(name = "UPDATE_TIME")
        private Long updateTime;
    
        @PrePersist
        public void generarIds() {
            this.id = UUID.randomUUID().toString();
            this.resId = "res_" + this.id;
        }
    
        // getters and setters
    }
    

    Con esta configuración, cuando llame a repositorio.guardar(registro), JPA generará y establecerá automáticamente los valores de ID y RES_ID antes de persistir la entidad en la base de datos.

Comments are closed.