Spring Webflux, как сохранить дочернюю сущность с родительской сущностью? - PullRequest
0 голосов
/ 07 января 2020

Я работаю над проектом Spring webflux, я застрял в одном месте, где я хочу сохранить всю свою дочернюю сущность с родительской сущностью, ниже приведен сценарий.

Таблицы:

create table student(
    id integer GENERATED ALWAYS AS IDENTITY,
    name varchar(256),
    primary key(id)
);

create table address(
    id integer GENERATED ALWAYS AS IDENTITY,
    address1 varchar(256),
    city varchar(256),
    state varchar(256),
    student_id integer,
    primary key(id),
    foreign key(student_id) references student(id) on delete cascade
);

Поскольку Hibernate поддерживает функцию, при которой все дочерние объекты сохраняются при сохранении родительской сущности.

Но я не использую Hibernate, поскольку это блокирует операцию в webflux.

Классы:

@Table
public class Student {

    @Id
    private Integer id;
    private String name;
    //Getter & Setter
}
@Table
public class Address {

    @Id private Integer id;
    private String address1;
    private String city;
    private String state;
    private Integer studentId;
    //Getter & Setter
}

Репозиторий:

@Repository
public interface StudentRepository extends ReactiveCrudRepository<Student, Integer> {
}

Код Spring Webflux:

@Test
public void givenOrder_shouldCreateOrder(){
    Student order = new Student();
    order.setName("Alpesh");
    Mono<Student> orderMono = studentService.save(order);
    Mono<Address> addressMono = orderMono.flatMap(student -> {
        Address address = new Address();
        address.setAddress1("This is address1");
        address.setCity("Pune");
        address.setState("MH");
        address.setStudentId(student.getId());
        return addressRepository.save(address);
    });
    StepVerifier.create(addressMono)
            .expectNextMatches(student -> student.getId()>0)
            .verifyComplete();
}

Этот код работает, но это хорошая практика или есть Другой способ сделать это?

Может кто-нибудь, пожалуйста, помогите мне сделать это лучше?

Спасибо Alpe sh

...