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.

¿Puedo utilizar el registro de Java 16 con una entidad JPA?

Estoy tratando de hacer algo similar como se muestra a continuación.

@Entity
@Table(name="Sample")
public record Sample(Integer id, String name) {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="user_id")
    private Integer id;

    @Column(name="username")
    private String name;

}

Sin embargo, me muestra el error “Los campos declarados no estáticos id no están permitidos en un registro”, y lo mismo ocurre con el campo name también.

¿Existe alguna forma de utilizar la nueva característica de Java “record” con anotaciones JPA?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de usar la nueva característica de Java “record” con la anotación de JPA. Sin embargo, necesitas hacer algunos cambios en tu código ya que los records en Java están diseñados para ser inmutables, por lo que no puedes tener campos no estáticos. Por lo tanto, debes eliminar los campos no estáticos “id” y “name” de la declaración de tu record y moverlos a los parámetros del constructor. Aquí tienes un ejemplo de cómo puedes anotar un record usando las anotaciones de JPA:

    @Entity
    @Table(name="Muestra")
    public record Muestra(@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="user_id") Integer id, @Column(name="username") String name) {}
    

    En el ejemplo anterior, hemos movido los campos “id” y “name” de la declaración del record a los parámetros del constructor y hemos utilizado las anotaciones de JPA para anotar directamente los parámetros del constructor. Esto te permite usar la nueva característica de Java “record” con las anotaciones de JPA.

Comments are closed.