Java 将实体动态映射到多个表

Java 将实体动态映射到多个表,java,jpa,eclipselink,Java,Jpa,Eclipselink,我刚刚用eclipselink搜索了动态映射,我找不到适合我的案例的解决方案,现在在我的系统中,一个实体有3个版本,一个是工作/草稿(即W100),另一个是生产(即M100),剩下的一个是历史版本(H100),我们可以随时访问工作、生产和历史版本。 i、 e eclipselink(或Hibernate)支持这一点吗?我的动态映射接受一个参数来决定使用哪个表,也就是说这是一个交互式动态映射。 我们可以并且如何将一些定制插件到eclipselink元数据类中 谢谢。SQL表名是使用xml配置/注释

我刚刚用eclipselink搜索了动态映射,我找不到适合我的案例的解决方案,现在在我的系统中,一个实体有3个版本,一个是工作/草稿(即W100),另一个是生产(即M100),剩下的一个是历史版本(H100),我们可以随时访问工作、生产和历史版本。 i、 e

eclipselink(或Hibernate)支持这一点吗?我的动态映射接受一个参数来决定使用哪个表,也就是说这是一个交互式动态映射。 我们可以并且如何将一些定制插件到eclipselink元数据类中


谢谢。

SQL表名是使用xml配置/注释映射到实体类的,所以我怀疑您能否在运行时更改它

我能想到的唯一方法是使用entity manager本机查询,例如:

String sql = "select xyz from " + tableName;
List<MyEntity> reuslt = em.createNativeQuery(sql, MyEntity.class).getResultList();
String sql=“从”+tableName中选择xyz;
List reuslt=em.createNativeQuery(sql,MyEntity.class).getResultList();

我将创建Account的三个子类(DrafAccount、ActiveAccount、HistoricaAccount)并使用@MappedSuperclass或TABLE\u PER\u类继承。要切换帐户,您需要删除旧帐户并创建新帐户

另一种方法是定义一个视图,使这三个表看起来像一个表(或者实际上更改为有一个带有类型列的表)


您可以使用自定义SQL、存储过程或查询重定向程序自定义EclipseLink操作,但我建议更改您的模型,而不要在下面伪造它。

“更新”操作可以使用类似“本机更新”的功能吗?我想将我的定制插件到JPA元数据API类,但我不确定这一点。是的,您可以使用不带类参数的变量:
createNativeQuery(java.lang.String sqlString)
String sql = "select xyz from " + tableName;
List<MyEntity> reuslt = em.createNativeQuery(sql, MyEntity.class).getResultList();