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

回到顶部