0

我们将 Hibernate 与 IBM DB2 9.7 一起使用。数据库给出关于 Hibernate 生成的选择语句列表太大(包括很多连接)的错误。错误代码是 840。可以做些什么来解决这个问题吗?我知道生成的选择列表很长,但是可以将 Hibernate 设置为将其拆分为几部分吗?

编辑:我重新打开了这个,因为问题似乎有点大。所以在https://hibernate.onjira.com/browse/ANN-140有一个 JIRA 问题(现在被拒绝) 。

所以问题在于,使用 Hibernate Annotations,不可能使用 Join 策略添加鉴别器。然而,XML 配置确实支持这一点。

Pavel 很好地说明了上述链接讨论中的问题,如下所示:

"It would be nice to see how the problem with the multiple joins is faced when the
 underlying DB has restriction on the number of joins one can execute in a single SQL?
For instance MySQL seems to allow only 31 joins. What happens if the class hierarchy
has more     than 31 sub-classes?"

以上就是我遇到的问题。我们使用注解,子类很多,创建了大量的连接,破坏了 DB2 语句。

对此有何评论?我也找不到直接的解决方案。

4

1 回答 1

3

Hibernate 很少有抓取策略来优化 Hibernate 生成的 select 语句,使其尽可能高效。获取策略在映射关系中声明,用于定义 Hibernate 如何获取其相关的集合和实体。

获取策略有四种获取策略

  1. fetch-”join” = 禁用延迟加载,始终加载所有集合和实体。
  2. fetch-”select”(默认)=延迟加载所有集合和实体。
  3. batch-size=”N” = 最多获取“N”个集合或实体,不记录
  4. fetch-”subselect” = 将它的集合分组到一个 sub select 语句中。

有关详细说明,您可以查看Hibernate 文档

于 2012-10-10T07:17:36.597 回答