gpt4 book ai didi

java - Session.get() 的调用在多次调用后挂起

转载 作者:行者123 更新时间:2023-11-29 13:23:34 25 4
gpt4 key购买 nike

我想在一次调用中使用 Hibernates Session 保存许多实体,所以我创建了以下代码:

public void persistOrUpdateAllTrades(List<Trade> objects) {
EntityManager entityManager = entityManagerFactory.createEntityManager();
Session session = (Session)entityManager.getDelegate();

try {
FlushMode lastFlushMode = session.getFlushMode();
session.setFlushMode(FlushMode.MANUAL);

for(Trade trade: objects) {
if(session.get(Trade.class, trade.getId()) == null){
session.save((Object)trade);
}
}

session.flush();
session.setFlushMode(lastFlushMode);

} catch (Throwable e) {
throw new RuntimeException(e.getMessage(),e);
}

}

它通常运行良好,但有时执行会停止/挂起于 if(session.get(Trade.class, trade.getId()) == null)我不知道为什么。它不会引发任何异常,并且应用程序不会停止。应用程序使用在本地主机上运行的 MySQL 服务器。有什么提示吗?

最佳答案

您没有关闭 EntityManager。这是泄漏资源,最常见的是来自连接池的连接。最终,池没有更多可用连接,因此它只会阻塞,直到获得可用连接(在您的情况下永远不会)。快速解决方法就是在方法底部执行 entityManager.close()

关于java - Session.get() 的调用在多次调用后挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20447137/

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