.map() 不 return 更新的持久化对象
.map() does not return the updated persisted object
我正在尝试使用新创建的 TicketToken 对象创建新的数据库条目。然后我想用外键字段上生成的 id 更新 Ticket 对象。我很好地创建了 TicketToken 对象,它与生成的值一起出现在数据库中,但是在映射期间,该对象具有空字段。
Uni<Long> tokenUni = ticketService.findTicketById(ticketId).map(Ticket::getTicketTokenId);
Uni<Long> newTokenId = tokenUni.onItem().ifNull().switchTo(Uni.createFrom().item(new TicketTokenId())
.chain(ticketTokenId -> tokenIdService.persistTicketTokenId(ticketTokenId))
.map(createdToken -> {
log.info(createdToken.toString());
ticketService.findTicketById(ticketId).onItem().invoke(ticket -> {
ticket.setTicketTokenId(createdToken.getTokenId());
ticketService.updateTicket(ticket).subscribe().with(item -> log.info("Successfully updated ticket -> " + item.toString()));
}).subscribe().with(item -> log.info("Updated ticket with tokenId"));
return createdToken.tokenId;
})
);
第一个日志应该有一个类似 {id: 1, field2: null, field3: null, ...}
的 TicketTokenId 对象,但它有一个空对象 {id: null, field2: null, field3: null, ...}
,这意味着它没有 return 实际的持久化对象。
我怎样才能获得 id,以便我可以 link 它在另一个对象之后?
我修好了。我没有使用 id 更新持久化对象的原因是因为 persistTicketTokenId 方法只使用了 Panache persist
方法。使用 persistAndFlush
方法后我不得不冲洗它
public Uni<TicketTokenId> persistTicketTokenId(@Valid TicketTokenId ticketTokenId) {
// For now, ticket creation is restricted to admin accounts. Later it will be implemented for venue users
if (this.currentUser.getRole() != Roles.ADMIN) {
log.warn("User does not have permissions to create a ticket");
return Uni.createFrom().failure(new ForbiddenException());
}
return Panache.withTransaction(ticketTokenId::persistAndFlush);
我正在尝试使用新创建的 TicketToken 对象创建新的数据库条目。然后我想用外键字段上生成的 id 更新 Ticket 对象。我很好地创建了 TicketToken 对象,它与生成的值一起出现在数据库中,但是在映射期间,该对象具有空字段。
Uni<Long> tokenUni = ticketService.findTicketById(ticketId).map(Ticket::getTicketTokenId);
Uni<Long> newTokenId = tokenUni.onItem().ifNull().switchTo(Uni.createFrom().item(new TicketTokenId())
.chain(ticketTokenId -> tokenIdService.persistTicketTokenId(ticketTokenId))
.map(createdToken -> {
log.info(createdToken.toString());
ticketService.findTicketById(ticketId).onItem().invoke(ticket -> {
ticket.setTicketTokenId(createdToken.getTokenId());
ticketService.updateTicket(ticket).subscribe().with(item -> log.info("Successfully updated ticket -> " + item.toString()));
}).subscribe().with(item -> log.info("Updated ticket with tokenId"));
return createdToken.tokenId;
})
);
第一个日志应该有一个类似 {id: 1, field2: null, field3: null, ...}
的 TicketTokenId 对象,但它有一个空对象 {id: null, field2: null, field3: null, ...}
,这意味着它没有 return 实际的持久化对象。
我怎样才能获得 id,以便我可以 link 它在另一个对象之后?
我修好了。我没有使用 id 更新持久化对象的原因是因为 persistTicketTokenId 方法只使用了 Panache persist
方法。使用 persistAndFlush
public Uni<TicketTokenId> persistTicketTokenId(@Valid TicketTokenId ticketTokenId) {
// For now, ticket creation is restricted to admin accounts. Later it will be implemented for venue users
if (this.currentUser.getRole() != Roles.ADMIN) {
log.warn("User does not have permissions to create a ticket");
return Uni.createFrom().failure(new ForbiddenException());
}
return Panache.withTransaction(ticketTokenId::persistAndFlush);