【问题标题】:hibernate - Postgres- target lists can have at most 1664 entrieshibernate - Postgres- 目标列表最多可以有 1664 个条目
【发布时间】:2011-01-25 22:54:25
【问题描述】:

我们使用的是休眠,postgres 8.3x

我们的实体是多对一映射的。 我们与多对一映射有多种关联。

当我们向任何其他现有实体添加新列时, 我们收到以下错误:

目标列表最多可以有 1664 个条目

我搜索了互联网,他们说这是由于 sql查询中的select语句数量更多(由hibernate生成)

如果有任何配置,请告诉我们(在 postgres 中) 更新配置中的最大数量列或解决此问题的任何其他解决方案。

提前谢谢你。

【问题讨论】:

  • 试着说服我需要这么多的列。即使有连接,每个表至少应该有 400-500 列?

标签: hibernate postgresql orm


【解决方案1】:

有时当项目中有太多 @ManyToOne(fetch=FetchType.EAGER) 时会发生这种情况。 所以,当不需要 FetchType.EAGER 时,把 @ManyToOne(fetch=FetchType.LAZY)

这帮我,试试!

【讨论】:

  • 是的,那是我的问题。谢谢。
【解决方案2】:

这是 PostgreSQL 中的最大列数,没错。但是为什么你需要更多的列呢?只需进行一些标准化,您的问题就消失了。或者根本不使用关系数据库,当你不规范化时,你总是会达到最大列数。

【讨论】:

  • 感谢弗兰克·海肯斯。这与单个数据库表中的列数无关。但是当我们加入多个列时(通过休眠中的 createCriteria),我们得到了这个错误。
  • 嗯,我明白了,现在我明白了。帮不了你,我们从来没有遇到过这个问题,我们的查询中从来没有这么多的列。
【解决方案3】:

您的模型/映射/查询肯定存在错误。解决这个问题的正确方法是处理你的模型/映射/查询,而不是 PostgreSQL 中的最大列数(我什至不知道你是如何到达它的,检索 1664+ 列的查询不会产生任何感觉)。

【讨论】:

  • 错误表示条目,而不是列。您可以使用非常大的 WHERE ID IN VALUES (?,?,...) 查询来完成。而不是 WHERE ID IN (...)
【解决方案4】:

试试

      <property name="hibernate.max_fetch_depth" value="25"/>

【讨论】:

  • 对不起马丁。这是不正确的。如果我们增加最大提取深度,更多的列将包含在提取列表中,它会抛出错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
  • 2014-10-13
  • 2016-12-12
  • 1970-01-01
  • 2016-03-14
  • 2021-10-31
  • 1970-01-01
相关资源
最近更新 更多