如何在 quarkus 中执行多个查询时返回 Uni<int[]>?



在我的应用程序中,我在一个事务中执行两个查询,第一个是选择,第二个是插入,但插入后我想返回插入的id,我们怎么能做到呢?

public Uni<int[]> addRUnRe(int id, String ids,String owner) {
try{

String sql="SELECT COUNT(*) as c FROM table1 WHERE id=$1 AND owner=$2";
String sql2= "Insert into table2 (event_id, request_id)"
+ "  values ($1, $2) RETURNING id)";
Uni<int[]> insertTwo = null;
return SqlClientHelper.inTransactionUni(client, tx -> {
Uni<Integer> insertOne = tx.preparedQuery(sql)
.execute(Tuple.of(id, owner)).onItem().transform(pg -> pg.iterator())
.onItem().transform(r -> r.hasNext() ? r.next().getInteger("c"): 0);


int isUserAllowed = insertOne.await().indefinitely();

if (isUserAllowed == 1) {
if(StringUtils.isNotBlank(ids)){
String[] rids=ids.split(",");
List<Tuple> batch = new ArrayList<>();
for (int i=0;i<rids.length;i++) {
Object[] array = {insertOne, rids[i]};
batch.add(Tuple.of(Arrays.asList(array)));
}

Uni<int[]> insertTwo = tx.preparedQuery(sql2)
.executeBatch(batch).onItem().transform(pgRowSet -> IntStream.range(0, pgRowSet.size()).toArray());
return insertTwo;
}
}
return insertOne.and(insertTwo)
// Ignore the results (the two ids)
.onItem().ignore().andContinueWithNull();
});

}catch(Exception e){
return null;
}
}

请让我知道我做错了什么,如何正确地做?

作为一个选项,我们可以返回映射,尽管在Java中希望为映射接口选择不可变键。

Map<String[], Uni<int[]>>

然后你可以使用

来获取值
map.entrySet().forEach((key, value) -> ... )

相关内容

最新更新