【发布时间】:2015-10-28 02:29:31
【问题描述】:
我正在编写 Java 应用程序(Spring Data/Hibernate/JPA),它应该适用于 MySQL DB。 我有一个简单的任务,应该是原子的: 1. 从数据库中检索第一项 2. 将此item绑定到当前用户(UPDATE item SET user_id=current_user_id WHERE id=id)
我在这两个步骤之间设置了 500 毫秒的暂停时间来测试它的并发性并在事务中运行它。事务存在,如果我在这段代码中抛出异常,至少它会回滚。 但是原子性并没有按我的意愿工作,在这 500 毫秒的暂停中,我得到了以下情况:
- user1 开始交易
- user1 检索第一个项目 - item1
- user2 开始交易
- user2 检索第一个项目 - item1
- user1 更新 item1
- user1 提交事务
- user2 更新 item1
- user2 提交事务
当用户 1 处于事务中时,有没有办法将表与用户 2 的读/写查询隔离开来?它应该是数据库级别的事务,以允许应用程序在不同服务器上的 2 个实例。
【问题讨论】:
标签: java mysql database hibernate transactions