gpt4 book ai didi

java - 在一个 session 期间提交多个事务会提高性能吗?

转载 作者:行者123 更新时间:2023-12-02 13:07:24 25 4
gpt4 key购买 nike

我希望能够使用一个实体管理器来针对涉及不同实体对象的 CRUD 操作提交多个事务。例如,我希望能够在一个实体管理器 session 期间删除一只猫实体对象并创建一个新的狗实体对象。我通过让catService和dogService(可以CRUD对象的对象)扩展GenericService来实现这一点:

public abstract class GenericService<T> {
private Class<T> type;
protected static EntityManager entityManager;

public GenericService() {
Type t = getClass().getGenericSuperclass();
ParameterizedType pt = (ParameterizedType) t;
type = (Class) pt.getActualTypeArguments()[0];
if (entityManager == null || !entityManager.isOpen()) entityManager = GetEntityManager.getInstance(); // zo kunnen meerdere services gebruik maken van dezelfde entitymanager sessie. 1 operation per sessie is een antipattern namelijk. Beter meerdere operations in 1 sessie doen.
}

// sluit entityManager en daarmee dus ook de sessie af.
public void close(){
entityManager.close();
}

现在这两个服务共享同一个实体管理器。现在我可以进行多个事务并仅在最后一个 Service 对象上调用继承的 close() 方法,然后关闭共享实体管理器。

我打算制作一个网络应用程序,所以我想知道是否可以通过让在不同实体对象上操作的不同服务对象共享实体管理器 session 来更有效地使用实体管理器 session ,与打开和关闭新 session (实体)相比,是否会带来性能增益经理)仅用于一笔交易。

谢谢。

最佳答案

每次操作 session anti-pattern但不是出于性能原因。您可以执行大量额外计算(例如创建 session ),而不会注意到任何性能差异,因为与执行额外计算相比,等待数据库完成事务需要很长时间(数据库 I/O 操作需要几毫秒才能完成,计算需要纳秒完成)。

由于您打算创建一个 Web 应用程序,请尝试使用 Hibernate 的 sessionFactory.getCurrentSession() ,它的作用类似于您现在在 GenericService 的构造函数中所做的操作 -更多信息在 user guide , this answerjavadocs .

关于java - 在一个 session 期间提交多个事务会提高性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44089517/

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