我有一个与表关联的Hibernate数据类;想象这样的实体 人 :
@Entity @org.hibernate.annotations.Proxy(lazy=false) @Table(name="Person", schema="MySchema") @Inheritance(strategy=InheritanceType.SINGLE_TABLE) public class ProfileData implements Serializable { private static final long serialVersionUID = -844564646821609090L; public PersonData() { } @Column(name="idPerson", nullable=false, unique=true) @Id ...
我需要按此表的年份创建历史表 :Person2010,Person2011,Person2012 …是否可以不创建新的数据对象?也许是通过参数…?我不知道。
实体类相同,只是更改了表名和构造函数。
另一个体系结构,更复杂但更优雅:
是的 ,您可以使用 NamingStrategies 更改表名称:
public class MyNamingStrategy extends DefaultNamingStrategy { ... @Override public String tableName(String tableName) { return tableName+yearSuffixTable; } ... }
而且,当您想使用_year表时,必须使用Hibernate创建一个覆盖rhe表名称的会话:
SessionFactory sessionFactory; Configuration config = new AnnotationConfiguration() .configure("hibernate.cfg.xml") .setNamingStrategy( new MyNamingStrategy () ); sessionFactory = config.buildSessionFactory(); session = sessionFactory.openSession();
对于我的体系结构,我每年创建一个会话,并将其存储到应用程序映射中以在需要时进行访问。
谢谢。