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)
如果没有,你能提出什么方法?
是否可以在运行时更改实体的表名,因为它们毕竟具有相同的表结构?
这实际上是不可能的,至少不是标准的JPA(这并不意味着我用非标准的JPA做过),如下所述:
总而言之,JPA没有提供一种方法来"改变"已经初始化的持久性单元的给定实体(以及相关的预编译CRUD查询,预编译的命名查询等).
不过,既然你正在使用Hibernate,也许可以查看http://www.hibernate.org/171.html来了解使用Hibernate Core API的可能性.
我能想到的另一个选择是使用数据库同义词/别名:FOO将是别名,FOO_JAN2010直到...你将别名改为指向FOO_FEB2010.我从未测试过这个,我不知道它是否适合你的需求.但这是另一个想法.
你可以大概做使用命名策略,如果你使用Hibernate作为JPA提供者。请参阅我对上一个问题的回答以供参考。
您应该能够设计命名策略,以动态方式返回表名。
但是,是否应该以这种方式进行操作的问题是完全不同的。
另外,感谢Pascal提醒我,这仅在每月重新创建一次EntityManagerFactory时才有效(有很多方法可以执行此操作,重新启动Webapp是最简单的方法)
| 归档时间: |
|
| 查看次数: |
31364 次 |
| 最近记录: |