【问题标题】:How much fields can be holded and operated by Hibernate JPA entity?Hibernate JPA实体可以持有和操作多少字段?
【发布时间】:2021-01-20 06:09:13
【问题描述】:

我有继承实体类的结构与策略加入。 final(叶子)实体类的字段总数超过3000。Hibernate可以在这么宽的实体自治下运行吗?当然,我知道 RDBMS 级别的最大列数限制。这个限制对使用 jpa 有影响吗?

【问题讨论】:

  • 因为 jpa 实体是一个 java 类。我猜this question 会解决你的问题。
  • 好的。 Java 可能性的上限是已知的。但是JPA呢?我想它一定要低得多。

标签: java hibernate jpa


【解决方案1】:
  1. 正如它在休眠documentation 中所说:

联表继承多态查询可以使用多个 JOINS,这可能会在获取大量实体时影响性能。

  1. 不知道你用的是什么数据库,仅供参考:
  • Oracle 表最多可以容纳 1000 列(请参阅this
  • PostgreSQL 表最多可容纳 1600 列(请参阅this
  • MySQL 表最多可容纳 4096 列(请参阅this
  1. 正如回答here

类或接口可以声明的字段数量受ClassFile 结构的fields_count 项的大小限制为65535(第4.1 节)

所以,恕我直言,您宁愿面对java.lang.OutOfMemoryError 异常或性能问题,也不愿限制实体中的字段计数。

【讨论】:

  • 但是 Hibernate 可以绕过数据库限制吗?
  • 是的,hibernate 在一些常见 的情况下会这样做。例如 hibernate 提供the table identifier generator,它对于不支持序列的数据库很有用。但是您的情况非常具体。至于我,你的困难表明你使用了错误的方法/技术来解决你的问题。
【解决方案2】:

我已经完成了这项任务的轻量级研发工作,并准备解释结果。

  1. Hibernate 允许您使用宽实体进行操作。您可以构建包含策略的类层次结构,并在层次结构类之间传播所需的字段。
  2. 之后,您可以随意以普通方式填充和持久化实体
  3. 但是!您无法通过一个查询读取整个实体:DB 对 ResultSet 中每个元组的最大列数有限制。

【讨论】:

    猜你喜欢
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    相关资源
    最近更新 更多