Is it possible to change the table name of an entity as follows on runtime since they have the same table structure after all?
This is not really possible, at least not with standard JPA (which doesn't mean I did it with non standard JPA) as mentioned in questions such as:
- In @Table(name = “tableName”) - make “tableName” a variable in JPA
- JPA: How do I specify the table name corresponding to a class at runtime?
- Hibernate or iBatis or something else?
To summarize, JPA doesn't offer a way to "alter" a given entity of an already initialized persistence unit (and the related pre-compiled CRUD queries, the pre-compiled named queries, etc).
Still, since you're using Hibernate, maybe have a look at http://www.hibernate.org/171.html to get an idea of what would be possible using Hibernate Core API.
Another option I can think of would be to use a database synonym / alias: FOO
would be an alias for FOO_JAN2010
until... you change the alias to point on FOO_FEB2010
. I've never tested this, I don't know if it will suit your needs. But it's another idea.