一尘不染

在运行时更改实体的表名?

hibernate

每月都会生成此表。基本上所有 月度 表的表结构都是相同的。

由于仅使用不同的表名来映射同一实体将需要大量工作,

由于实体的表名毕竟具有相同的表结构,是否可以按以下方式更改实体的表名?

   @Entity
   @Table(name="FOO_JAN2010") // any other ways to generate this dynamically?
   public class FooJan2010Table {  // if we can dynamically set the table name this can be simply named FooTable
       ...
   }

如果没有,您可以建议什么方法?


阅读 260

收藏
2020-06-20

共1个答案

一尘不染

由于实体的表名毕竟具有相同的表结构,是否可以按以下方式更改实体的表名?

这实际上是不可能的,至少对于标准JPA(这不是我对非标准JPA所做的)至少不是这样,如在以下问题中提到的:

总而言之,JPA没有提供一种“更改”已初始化持久性单元(以及相关的预编译的CRUD查询,预编译的命名查询等)的给定实体的方法。

不过,由于您使用的是Hibernate,所以也许请看一下http://www.hibernate.org/171.html,以了解使用Hibernate
Core API可能发生的情况。

我可以想到的另一种选择是使用数据库 同义词 / 别名
:在…更改别名以指向之前,FOO将使用它作为别名。我从未测试过,我不知道它是否适合您的需求。但这是另一个想法。FOO_JAN2010``FOO_FEB2010

2020-06-20