java - IBM DB2 9.7 错误代码 840,select 语句列表太大

标签 java hibernate db2

我们正在将 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如何获取其相关的集合和实体。

获取策略 有四种抓取策略

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

详细说明可以查看Hibernate documentation .

关于java - IBM DB2 9.7 错误代码 840,select 语句列表太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12813858/

相关文章:

java - Spliterator Java 8 - 自定义实现

java - 如何获取自定义注释的@PathVariable值?

sql - DB2 中的化合物 "OR"评估

java - JPA/Hibernate Spring @Transactional 与 JOIN FETCH

hibernate - 没有正确的引用->删除问题

sql - DB2 存储过程 IF 语句

sql - DB2 子系统中单个模式下表名的最大数量是多少?

java - Java 中的客户端-服务器通信

java - 是否有任何 JavaFX gui 生成器?

java - 加入时有额外条件的疯狂 hibernate 标准?