首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hibernate在MySQL上发出过多查询

Hibernate在MySQL上发出过多查询
EN

Stack Overflow用户
提问于 2011-03-26 19:31:31
回答 3查看 1K关注 0票数 5

我在spring中使用hibernate 3.0和MySQL5。我已经在JBOSS中配置了JNDI数据源,并在应用程序上下文中使用它。

我的问题是,Hibernate平均每秒向数据库发出466.4个查询,而网站上几乎没有任何负载。

ApplicationContext.xml代码片段是

代码语言:javascript
运行
复制
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton">
    <property name="jndiName" value="java:MyCustomDSName" />
    <property name="resourceRef" value="true" /> 
</bean>

我在java级别使用JTA事务。欢迎任何帮助。

EN

回答 3

Stack Overflow用户

发布于 2011-04-01 07:31:50

其中之一应该是这样的。

  • 您收到/处理的请求太多-在dev.
  • 您遇到N+1 select条件是不太可能的-这很常见。

请发布您的域模型,以及正在执行的查询。

票数 3
EN

Stack Overflow用户

发布于 2016-10-28 03:22:43

这通常是由N+1查询问题引起的。但是,您可以使用单元测试断言机制来查找所有那些引起N+1查询问题(如this JUnit assert mechanism using datasource-proxy ) JPA和Hibernate数据访问方法。

此外,最好将所有的EAGER关联都切换到LAZY,因为如果您忘记在每个JPQL或Criteria API查询中联接获取关联,EAGER fetching很容易生成N+1查询问题。

LAZY loading还可能导致N+1查询问题。当您在每次迭代时初始化父代理时,当您迭代子实体的集合时,就会发生这种情况。同样,使用this JUnit assert mechanism using datasource-proxy可以轻松地检测到这一点。

票数 2
EN

Stack Overflow用户

发布于 2011-04-03 11:12:35

您如何使用JTA事务?如果每个Java方法都被标记为需要一个新事务,这可以部分解释您的问题。此外,还应该检查Hibernate对象关系。如果您有复杂的关系,在模型关系或循环关系中定义了许多急切加载的对象,那么您可能会有更难解决的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5442023

复制
相关文章

相似问题

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