java - 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
任何人都知道是否可以一次执行一项交易,或解决方案?
非常感谢
丹尼尔
解决方案
推荐阅读
- reactjs - 如何使 InputLabelProps 聚焦 TextField 材质 ui
- amazon-web-services - Terraform:cat 命令问题
- javascript - Chrome扩展,基于异步获取数据创建新标签
- visual-studio - Visual Studio Xamarin.UITest:“System.Exception:未找到 Android SDK。” 运行 UITests
- javascript - 嵌套 JSON 对象的输出未定义
- c - C 中的 ctime 函数为 atime、mtime 和 ctime 的不同值返回相同的字符串?
- django - 在 Django 中使用 try except 处理错误
- python - 非常大的文件,输入数据管道开发,tensorflow
- c - 使用共享库:自定义 myfopen()、myfrwrite()
- html - 将 JSON 数据放入 HTML 元素