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

标签 mysql jpa jpa-2.0 eclipselink

我想创建基于实体和 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/

相关文章:

javascript - 将来自mysql的数据存储在本地存储中

mysql - 从 AWS RDS (MySQL) 加载表时是否可以强制定义模式

php - 使用 jQuery AJAX 在完整日历中显示事件

java - JPA 2 - 如何使用 Spring Data JPA 构建具有主键也是外键的实体?

mysql - 问号在 MySQL 中 "WHERE column = ?"的意义是什么?

java - 存储动态 JPA 查询

sql - jpa多对多查询

java - Hibernate @OneToMany 关联尝试设置 null FK 值

java - java中没有@Id注释的序列生成器与Postgres中的hibernate在一定范围内

java - 使用动态列表使用 jpa 2.0 构建条件查询