我在spring中使用hibernate 3.0和MySQL5。我已经在JBOSS中配置了JNDI数据源,并在应用程序上下文中使用它。
我的问题是,Hibernate平均每秒向数据库发出466.4个查询,而网站上几乎没有任何负载。
ApplicationContext.xml代码片段是
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" scope="singleton">
<property name="jndiName" value="java:MyCustomDSName" />
<property name="resourceRef" value="true" />
</bean>我在java级别使用JTA事务。欢迎任何帮助。
发布于 2011-04-01 07:31:50
其中之一应该是这样的。
请发布您的域模型,以及正在执行的查询。
发布于 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可以轻松地检测到这一点。
发布于 2011-04-03 11:12:35
您如何使用JTA事务?如果每个Java方法都被标记为需要一个新事务,这可以部分解释您的问题。此外,还应该检查Hibernate对象关系。如果您有复杂的关系,在模型关系或循环关系中定义了许多急切加载的对象,那么您可能会有更难解决的问题。
https://stackoverflow.com/questions/5442023
复制相似问题