Hier ist die erste Methode:
Code: Select all
@WithTransaction
public Uni modifyWorkplace(Workplace request) {
return workplaceRepository.update("nickname = ?1, version = ?2 where id = ?3",
request.getNickname(),
request.getVersion(),
request.getId())
.onItem().transformToUni(updateCount -> {
return workplaceRepository.findById(request.getId());
})
.onItem().ifNull().failWith(() -> new IllegalArgumentException("Workplace not found"));
}
Code: Select all
@WithSession
@WithTransaction
public Uni modifyWorkplace(Workplace request) {
return workplaceRepository.findById(request.getId())
.chain(existing ->
workplaceRepository.update("nickname = ?1, version = ?2 where id = ?3",
request.getNickname(),
request.getVersion(),
request.getId())
.chain(updateCount -> {
return workplaceRepository.findById(request.getId());
})
)
.onItem().ifNull().failWith(() -> new IllegalArgumentException("Workplace not found"));
}
Code: Select all
@WithSession
@WithTransaction
public Uni modifyWorkplace(Workplace request) {
return workplaceRepository.findById(request.getId())
.onItem()
.ifNotNull()
.transformToUni(existing ->
workplaceRepository.update("nickname = ?1, version = ?2 where id = ?3", request.getNickname(), request.getVersion(), request.getId())
.onItem().transformToUni(updateCount -> {
return workplaceRepository.getSession()
.onItem()
.ifNotNull()
.transformToUni(session -> session.refresh(existing).replaceWith(existing));
})
)
.onItem().ifNull().failWith(() -> new IllegalArgumentException("Workplace not found"));
}
}
- Warum werden im zweiten Fall immer veraltete Daten zurückgegeben?< /li>
Warum löst die Verwendung von session.refresh dieses Problem?