我们正在将 Hibernate 与 IBM DB2 9.7 结合使用。数据库给出关于 Hibernate 生成太大的 select 语句列表(包括大量连接)的错误。错误代码是 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 语句。
对此有何评论?我也找不到直接的解决方案。
最佳答案
Hibernate有很少的抓取策略来优化Hibernate生成的select语句,使其尽可能高效。映射关系中声明了获取策略,以定义Hibernate如何获取其相关的集合和实体。
获取策略 有四种抓取策略
- fetch-”join” = 禁用延迟加载,始终加载所有集合和实体。
- fetch-“select”(默认)= 延迟加载所有集合和实体。
- batch-size=”N” = 获取最多“N”个集合或实体,不记录。
- fetch-”subselect” = 将其集合分组到子选择语句中。
详细说明可以查看Hibernate documentation .
关于java - IBM DB2 9.7 错误代码 840,select 语句列表太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12813858/