如何 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);
}
}
我正在尝试使用 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);
}
}