如何 return 使用 hibernate 的响应式扩展新持久化的实体

How to return the newly persisted entity using the reactive extensions for hibernate

我正在尝试使用 mutiny 来持久化一个实体。添加方法应该 return 一个 Uni<Entity> 引用新持久化(或合并)的实体(我正在使用 isPersistent 标志来确定一个实体之前是否已经持久化)。如果它是由休眠生成的,我还需要对实体的更新 ID 的引用。

    @Override
    public Uni<Entity> add(Entity entity) {
        if(entity.isPersistent()){
            return sessionFactory.withSession(s ->s.merge(entity));
        }else{
            entity.markAsPersistent();
            return sessionFactory.withSession(s ->s.persist(entity)); // Error!
        }
    }

然而,s.persist()return是Uni<Void>。 我尝试按如下方式修改代码(这导致分离实体):

return sessionFactory.withSession(s ->s.persist(entity).chain(s::flush).replaceWith(entity));

我应该如何继续将 Uni<Void> 映射到相应的 Uni<Entity>,它不处于分离状态?

您需要“替换”第二个块的 return 值:

@Override
public Uni<Entity> add(Entity entity) {
    if (entity.isPersistent()) {
        return sessionFactory.withSession(s -> s.merge(entity));
    } else {
        entity.markAsPersistent();
        return sessionFactory.withSession(s -> s.persist(entity))
                             .replaceWith(() -> entity);
    }
}