JPA / Hibernate的最大连接数?
JPA /hibernate查询中允许的联接数是否有限制?
由于Hibernate 不会自动加入,因此我必须在JPA /
Hibernate查询中明确指定加入。例如,一个人有一个地址,一个地址有一个状态。以下查询检索地址和状态已满的人员:
select p, a, s from person p left join p.address a left join a.state s where ...
随着我不断添加联接,最终(在左联接12-13之后)达到了Hibernate生成无效SQL的限制:
Caused by: java.sql.SQLException: Column 'something69_2_' not found.
我确实将Hibernate的方言设置为数据库实现MySQL:
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
Hibernate在单个查询中可以处理的连接数是否有限制?
以下是在日志文件中:
could not read column value from result set: something69_2_; Column 'something69_2_' not found.
但是,something69_2_
不会出现在SQL查询中。就像Hibernate生成了一个SQL查询,并期望something69_2_
将其包含在结果中,事实并非如此。
记录为未修复的Hibernate错误HHH-3035的类似问题
这是已记录的Hibernate错误HHH-3636,已修复,但尚未成为任何发行版的一部分。
我建立了hibernate-core 3.3.2-SNAPSHOT,其中包括错误修复程序HHH-3636,但它没有解决此问题。
错误行为似乎是由LEFT JOIN
FETCHManyToMany或OneToMany关系上的多个事件触发的。一个会起作用,两个或三个会导致该错误。
这是堆栈跟踪:
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:629)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:73)
Caused by: org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2214)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)
at org.hibernate.loader.Loader.list(Loader.java:2090)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:388)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:64)
... 69 more
Caused by: java.sql.SQLException: Column 'something69_2_' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1136)
at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2777)
at org.hibernate.type.IntegerType.get(IntegerType.java:28)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:113)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:102)
at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1088)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:553)
at org.hibernate.loader.Loader.doQuery(Loader.java:689)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2211)
... 77 more
所有这些联接的原因是为了避免Hibernate执行n + 1个查询,请参阅有关如何在运行Hibernate查询时如何避免n +
1个SQL SELECT查询的Hibernate FAQ。
回答:
问题是,为什么首先要尝试进行如此复杂的查询?
您是否考虑过其他方法?有关提高性能的文档提出了一些建议。
以上是 JPA / Hibernate的最大连接数? 的全部内容, 来源链接: utcz.com/qa/420482.html