首页 > 解决方案 > Jpa 交易倍数

问题描述

我在特定情况下遇到问题。

想象一下,我有一张桌子可以购买音乐会门票,并且只有一张免费门票。

2 个用户(A 和 B)几乎同时尝试购买这张票。

实际表票 id(票) 1 用户(购买) null

所以现在有门票 1 免费

第一个尝试买这张票的是A,1秒后尝试B。交易代码如下...(我已经放了Thread.sleep进行模拟..)

@Transactional
public String getTicket(String user, Long idTicket) {
    Ticket ticket = ticketRepository.findByIdAndUserNull(idTicket);
    if(ticket == null)
         return "ticket not available";
    
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    ticket.setUser(user);
    
    return "TICKET PURCHASED";
}

我预计用户 A 在第一笔交易中买票,而 B 等待交易结束……因此 B 收到的票不可用。相反,我有这个结果 Table Ticket id(ticket) 1 user(purchased) B

任何人都知道是否可以一次执行一项交易,或解决方案?

非常感谢

丹尼尔

标签: javaspringjpaconcurrency

解决方案


推荐阅读