首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA/Hibernate在应用程序启动时在内存中维护大量查询

JPA/Hibernate在应用程序启动时在内存中维护大量查询
EN

Stack Overflow用户
提问于 2016-04-08 19:14:29
回答 1查看 585关注 0票数 0

最近,我意识到应用程序消耗的内存比它应该消耗的内存要多。我对JVM做了一个线程转储,发现Hibernate SessionFactoryImpl中有数百in的SQL查询。

这些查询出现在内存中,只需启动应用程序服务器。在后台,我已经放弃了队列(JMS)或其他一些进程的假设。

查询采用以下2种格式:

代码语言:javascript
复制
select
diferenc0_.id as id975_137_,
[...]
where diferenc0_.id=?

代码语言:javascript
复制
select
diferenc0_.id as id975_137_,
[...]
where diferenc0_.id= IN (?,?,?,?,?,?,?,?) -- because default_batch_fetch_size = 8

我的persistence.xml配置(关闭了hbm2ddl):

代码语言:javascript
复制
"hibernate.hbm2ddl.auto", ""
"hibernate.query.startup_check", "false"
"hibernate.show_sql", "false"
"hibernate.format_sql", "false"
"hibernate.transaction.auto_close_session", "true"
"hibernate.cache.use_second_level_cache", "false"
"hibernate.cache.use_query_cache", "false"
"hibernate.jdbc.batch_size", "20"
"hibernate.default_batch_fetch_size", "8"

我正在使用Hibernate 3.3.0。

另一个重要的细节:这些查询没有发送到数据库!我使用我们团队的DBA分析了Jboss启动时发送到数据库的查询。我们还在系统中不使用命名查询()。

作为一个有点老的应用程序,老开发人员在映射中使用了fetch急切资源。因此,这些生成的查询非常庞大。

问:当应用程序启动时,Hibernate出于什么目的在内存中创建这些查询?

EN

回答 1

Stack Overflow用户

发布于 2016-04-08 21:54:04

您可以尝试添加以下属性:

代码语言:javascript
复制
"hibernate.temp.use_jdbc_metadata_defaults","false"

移除

代码语言:javascript
复制
"hibernate.hbm2ddl.auto", ""
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36507547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档