Я работаю над проектом 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