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.

Cómo insertar una entidad incrustada en la base de datos utilizando el repositorio R2DBC.

Estoy utilizando el repositorio R2DBC para operaciones reactivas. Estoy tratando de insertar un registro que tiene un objeto Java agregado. Por ejemplo, Persona es una entidad dentro de la cual tengo Referencia de clase embebida diferente para Dirección. Ahora, quiero insertar los datos del objeto Persona en la base de datos.

Mi estructura de clase y base de datos se ve así:

@Data
@NoArgsConstructor 
public class Person {
  @Id
  private Long id;

  private String name;
  private Address address;
}

@NoArgsConstructor
@Data
public class Address {
  private String city;
  private String state;
}

Estructura de la tabla Persona en PostgreSQL:

CREATE TABLE Person(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   CITY           TEXT    NOT NULL,
   STATE          TEXT    NOT NULL,
);

NOTA: Sé cómo lograr esto usando el repositorio JPA, es decir, mediante el uso de las anotaciones @Embedded y @Embeddable.
Pero estoy buscando una manera de hacer lo mismo usando el repositorio R2DBC.

También quiero confirmar que he leído en algún lugar del blog que R2DBC no admite estructuras similares embebidas como las utilizadas para clases de entidad. Además, no admite asociaciones como OneToOne, OneToMany, ManyToOne y ManyToMany.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    ¿Es verdad?

    Sí, es verdad que R2DBC no soporta estructuras embebidas o asociaciones como OneToOne, OneToMany, ManyToOne y ManyToMany. Sin embargo, todavía puedes lograr el mismo resultado mapeando manualmente los datos desde el objeto Person a la tabla Person.

    Por ejemplo, puedes utilizar R2dbcEntityTemplate para insertar los datos en la tabla Person. Puedes utilizar el método map para mapear los datos desde el objeto Person a la tabla Person.

    r2dbcEntityTemplate.insert(Person)
     .map(person -> {
      return new Person(
       person.getId(),
       person.getName(),
       person.getAddress().getCity(),
       person.getAddress().getState()
      );
     })
     .subscribe();
    

    Esto insertará los datos desde el objeto Person en la tabla Person.

Comments are closed.