一尘不染

Hibernate:带注释的动态表名称的数据对象

hibernate

我有一个与表关联的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
…是否可以不创建新的数据对象?也许是通过参数…?我不知道。

实体类相同,只是更改了表名和构造函数。


阅读 404

收藏
2020-06-20

共1个答案

一尘不染

另一个体系结构,更复杂但更优雅:

是的 ,您可以使用 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();

对于我的体系结构,我每年创建一个会话,并将其存储到应用程序映射中以在需要时进行访问。

谢谢。

2020-06-20