gpt4 book ai didi

java - 并行运行多个 JPA 事务

转载 作者:可可西里 更新时间:2023-11-01 07:21:11 25 4
gpt4 key购买 nike

我有两个(或更多)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();
}

如果一个线程同时进入操作 saveEntity 和另一个 saveEntity2,两者都将尝试从 EntityManager 获取事务,但会失败。但是我一直认为底层数据库能够管理多个事务,尤其是当两个事务都在不同的行甚至不同的表上工作时。当然,我可以同步这些 block ,但这意味着一次只能连接一个数据库,这不会扩展到创建多个线程的多个用户。

我在这里做了什么错误的假设?是否可以通过JPA向数据库提交多个事务,让数据库处理并发问题?

最佳答案

EntityManager 不适用于多线程。您需要为每个线程获取单独的 EntityManager 实例。

实际上,如果您使用 EJB 或 Spring,您可以使用事务范围的 EntityManager,它可以在多个线程中使用(它是一个代理,将实际工作委托(delegate)给 EntityManager),但我认为这不是你的情况。

关于java - 并行运行多个 JPA 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5966797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com