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

Joo*_*ter 20 java orm hibernate jpa jpa-2.0

这个表是按月生成的.基本上所有月度表的表结构都是相同的.

因为使用不同的表名映射同一个实体需要做很多工作,

是否可以在运行时更改实体的表名,因为它们毕竟具有相同的表结构?

   @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
       ...
   }
Run Code Online (Sandbox Code Playgroud)

如果没有,你能提出什么方法?

Pas*_*ent 8

是否可以在运行时更改实体的表名,因为它们毕竟具有相同的表结构?

这实际上是不可能的,至少不是标准的JPA(这并不意味着我用非标准的JPA做过),如下所述:

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

不过,既然你正在使用Hibernate,也许可以查看http://www.hibernate.org/171.html来了解使用Hibernate Core API的可能性.

我能想到的另一个选择是使用数据库同义词/别名:FOO将是别名,FOO_JAN2010直到...你将别名改为指向FOO_FEB2010.我从未测试过这个,我不知道它是否适合你的需求.但这是另一个想法.


Sea*_*oyd 5

可以大概做使用命名策略,如果你使用Hibernate作为JPA提供者。请参阅我对上一个问题的回答以供参考。

您应该能够设计命名策略,以动态方式返回表名。

但是,是否应该以这种方式进行操作的问题是完全不同的。

另外,感谢Pascal提醒我,这仅在每月重新创建一次EntityManagerFactory时才有效(有很多方法可以执行此操作,重新启动Webapp是最简单的方法)