ali*_*ali 4 java mysql concurrency multithreading jpa
我有两个(或更多)Java线程使用JPA从mysql数据库创建,更新和删除实体.为了实现这一点,我有一个PersistenceLayer类创建EntityManager并为我的所有实体提供保存,更新和删除方法,如下所示:
public void saveEntity(Entity entity) {
manager.getTransaction().begin();
manager.persist(entity);
manager.getTransaction().commit();
}
public void saveEntity2(Entity2 entity) {
manager.getTransaction().begin();
manager.persist(entity);
manager.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)
如果一个线程同时进入操作saveEntity和另一个saveEntity2,两者都将尝试从EntityManager获取事务,这将失败.但是我一直认为底层数据库能够管理多个事务,特别是如果两个事务处理不同的行甚至不同的表.当然,我可以同步块,但这意味着一次只能进行一次数据库连接,这种连接不会扩展到创建多个线程的多个用户.
我在这做什么错误的假设?是否可以通过JPA向数据库提交多个事务并让数据库处理并发问题?
EntityManager不打算由多个线程使用.您需要EntityManager为每个线程获取单独的实例.
实际上,如果您使用EJB或Spring,您可以使用事务范围EntityManager,可以从多个线程使用(它是将实际工作委托给单独的线程绑定实例的代理EntityManager),但我认为这不是您的情况.
| 归档时间: |
|
| 查看次数: |
8718 次 |
| 最近记录: |