我有一个简单的crud应用程序与作者,流派,评论和图书领域实体。问题是:我不能正确地实现update方法。我为每个实体提供了一个带有putMap的控制器,该Map使用参数调用服务的update方法并返回结果。但后来我手动测试了一下,没有效果。看起来这些方法甚至没有被调用。我知道React流是懒惰的,但它应该被执行,否则我错过了一些东西。这是我的bookservice更新方法。
public Mono<Tuple2<Flux<Comment>, Book>> updateBook(String id, String title, String authorNameParameter,
String genreNameParameter) {
return bookRepository.findById(id)
.map(b -> commentRepository.saveAll(commentRepository.findByBook_Title(b.getTitle())
.flatMap(c -> Mono.just(c.setBook(title)))))
.zipWith(bookRepository.findById(id).flatMap(b -> getAuthor(authorNameParameter)
.flatMap(a -> Mono.just(b.setAuthor(a)))
.flatMap(book -> Mono.just(book.setTitle(title)))
.flatMap(book -> getGenre(genreNameParameter)
.flatMap(g -> Mono.just(book.setGenre(g))))));
}
在authorservice也一样:
public Mono<Tuple2<Flux<Book>, Author>> updateAuthor(String id, String name) {
return authorRepository.findById(id)
.map(a -> bookRepository.findByAuthor_Id(a.getId())
.flatMap(b -> Mono.just(b.setAuthor(a.setName(name)))).flatMap(bookRepository::save))
.zipWith(authorRepository.findById(id).flatMap(a -> Mono.just(a.setName(name)))
.flatMap(authorRepository::save));
}
和genreservice:
public Mono<Tuple2<Flux<Book>, Genre>> updateGenre(String id, String name) {
return genreRepository.findById(id)
.map(g -> bookRepository.findByGenre_Id(g.getId())
.flatMap(b -> Mono.just(b.setGenre(g.setName(name)))).flatMap(bookRepository::save))
.zipWith(genreRepository.findById(id).flatMap(g -> Mono.just(g.setName(name)))
.flatMap(genreRepository::save));
}
authorservice和genreservice更新author/genre实体,但不更新book,bookservice不做任何事情。我只想更新相关的实体(流派->书,作者->书,书->评论)。
setter只是创建一个新的示例进行修改,对于React式编程来说更方便。
最后一个问题是:在我的例子中,如何使用springwebflux实现级联更新。可能是我对被动概念有一些误解。
暂无答案!
目前还没有任何答案,快来回答吧!