Java 使用vertx jooq classic Responsive:5.0.1编写期货时,获取错误连接未打开或关闭
我有一个问题,当为了执行更新图书表和插入/删除中间表中的某些行(类别)图书和(作者)图书(图书)时,因为图书与作者和类别之间存在多对多关系。我在控制台中得到的错误消息是: 错误com.ns.vertx.pg.bookjooqquerys-错误,deleteCategoryBookFuture.compose(..)中出现故障!原因:io.vertx.core.VertxException:连接未打开或关闭 此外,我还在ReactiveClassicGenericQueryExecutor类的实例上混合使用DAO实例和execute()方法。这是我的类,我在这里得到这个错误,这是我的RESTful web服务的路由、DAO和其他配置发生的地方 我不知道我是否有可能“过度合成”了未来的实例,这就是导致此错误的原因,但据我所知,合成是在某些操作(插入/删除/更新)需要按顺序执行且所有操作都必须成功时使用的 我正在使用的库:Java 使用vertx jooq classic Responsive:5.0.1编写期货时,获取错误连接未打开或关闭,java,postgresql,vert.x,jooq,Java,Postgresql,Vert.x,Jooq,我有一个问题,当为了执行更新图书表和插入/删除中间表中的某些行(类别)图书和(作者)图书(图书)时,因为图书与作者和类别之间存在多对多关系。我在控制台中得到的错误消息是: 错误com.ns.vertx.pg.bookjooqquerys-错误,deleteCategoryBookFuture.compose(..)中出现故障!原因:io.vertx.core.VertxException:连接未打开或关闭 此外,我还在ReactiveClassicGenericQueryExecutor类的实例
Vert.x版本:3.8.2
vertx jooq经典无功功率:5.0.1
postgresql:42.2.2(Postgres DB在我的机器上是11.7版)
注意:我在我的book_CRUD分支中做了这些更改,这与master没有什么区别(因为我不想合并这些功能不全的更改)。我(更诚实地说)设法找到了解决方案,解决了这个问题。问题是(据我所知)不是要组成未来的实例,而是要组成右边的值(即方法调用)。例如,我的代码是这样编写的:
Set<Long> deleteCategoryIdsSet = HashSet();
Future<Integer> insertBCFuture = categoryBookDAO.insert(bookCategories);
Future<Integer> deleteCategoryBookFuture = queryExecutor.execute(dsl -> dsl
.deleteFrom(CATEGORY_BOOK)
.where(CATEGORY_BOOK.BOOK_ID.eq(Long.valueOf(bookId)))
.and(CATEGORY_BOOK.CATEGORY_ID.in(deleteCategoryIdsSet)))
Future<Integer> retVal = insertBCFuture.compose(res -> deleteCategoryBookFuture)
.setHandler(finalResRetVal -> {
// handle 'finalResRetVal'
..});
通过这种(解决的)方式,未来的代码和错误不会显示,删除和插入操作也会成功执行。我(更诚实地说)设法找到了解决问题的方法。问题是(据我所知)不是要组成未来的实例,而是要组成右边的值(即方法调用)。例如,我的代码是这样编写的:
Set<Long> deleteCategoryIdsSet = HashSet();
Future<Integer> insertBCFuture = categoryBookDAO.insert(bookCategories);
Future<Integer> deleteCategoryBookFuture = queryExecutor.execute(dsl -> dsl
.deleteFrom(CATEGORY_BOOK)
.where(CATEGORY_BOOK.BOOK_ID.eq(Long.valueOf(bookId)))
.and(CATEGORY_BOOK.CATEGORY_ID.in(deleteCategoryIdsSet)))
Future<Integer> retVal = insertBCFuture.compose(res -> deleteCategoryBookFuture)
.setHandler(finalResRetVal -> {
// handle 'finalResRetVal'
..});
以这种(解决的)方式,未来的代码和错误不会显示,删除和插入都会成功执行