gpt4 book ai didi

mysql - 基于 EclipseLink 2.5、JPA 2.0 中实体值的表名

转载 作者:行者123 更新时间:2023-11-29 00:29:59 30 4
gpt4 key购买 nike

我想创建基于实体和 JPA 2.0 的设计。在我们当前的架构中,我们将数据存储在 MySQL 的 2000 个分区中。每个分区都是 MyIsam 表,名称从 data_0000 到 data_1999,这只是软件解决方案。由于性能问题,我们没有使用任何特定于数据库的分区选项。这很好用,但从软件的角度来看,我们没有很好的架构。现在我们正在将所有内容迁移到 JPA,但我们遇到了这样的问题。

假设当我们要向某个分区插入数据时,我们必须计算分区号(表名),即 data_(entity.object_id mod 2000)。 object_id 列不为空。我们如何使用 JPA 和 EclipseLink 设计这个,如果我有 object_id=453 的实体,那么当我持久化这个对象时,数据将存储在表 data_0453 中。我在这里看到了很多基于添加符号的分区示例 http://wiki.eclipse.org/EclipseLink/Examples/JPA/Partitioning但没有一个与基于表名的分区相关。

这种情况下最好的方法是什么?

--

谢谢

最佳答案

EclipseLink 的分区支持是针对数据库分区,而不是表分区。大多数数据库都支持表分区,因此您必须自定义构建解决方案很奇怪。

您能否尝试使用 View 或存储过程来封装对表的访问? EclipseLink 允许您使用存储过程调用覆盖 CRUD 操作,请参阅 http://wiki.eclipse.org/EclipseLink/Examples/JPA/CRUDStoredProcedures

否则您可以将一个子类映射到每个表分区,但是对于 2000,这可能不是一个好的解决方案。您可以使用 EclipseLink 的动态支持来避免创建 2000 个子类。

您还可以查看 EclipseLink 的 Multi-Tenancy 支持,它确实具有根据 id 选择表的能力。

您也可以不映射表并通过 native SQL 查询访问它。

但是,我认为使用存储过程可能是您的最佳解决方案。

关于mysql - 基于 EclipseLink 2.5、JPA 2.0 中实体值的表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17059083/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com