我正在像这样手动创建一个类似于@PersistenceContext
的示例(不使用@PersistenceContext
注解)
private static final EntityManagerFactory entityManagerFactory = (EntityManagerFactory) ApplicationContextHolder.getContext().getBean("projEntityManagerFactory");
private Boolean update(String par) {
EntityManager entityManager = SharedEntityManagerCreator.createSharedEntityManager(entityManagerFactory);
StoredProcedureQuery query = entityManager.createStoredProcedureQuery(Constants.UPDATE_PROCEDURE);
//other update query builder code
return (Boolean) query.getOutputParameterValue(4);
}
字符串
我收到有关资源泄漏的警告。我假设这可能是因为entityManager
被使用但从未关闭。
我所尝试的:
1.我在我的方法上添加了@Transactional
注解,这样查询就被绑定到事务中,并且当事务结束时资源也被关闭。
1.我读了这个document,它指出我应该使用EntityTransaction
并关闭与entityManager.close()
的连接
哪一个是正确的?我如何解决资源泄漏警告?
1条答案
按热度按时间vshtjzan1#
仅仅看代码很难预测,但是为了在事务完成后返回DB连接,必须将JPA open-in-view(OSIV)改为false。而我认为第二种方法,直接关闭实体管理器,比较适合你的情况。不过,一般来说,将实体管理器注册为Spring bean并通过DI使用,将更有效地管理资源。如果您自己创建并使用,请确保返回资源。