Hibernate:带有Annotations动态表名的数据对象

gan*_*zux 9 java annotations 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 
    ...
Run Code Online (Sandbox Code Playgroud)

我需要在这个表的多年创建历史表:Person2010,Person2011,Person2012 ...是否可以不创建新的数据对象?也许通过一个参数......?我不知道.

Entity类是相同的,更改表名和构造函数.

gan*_*zux 19

另一个建筑,更完美但优雅:

是的,您可以使用NamingStrategies更改表名:

public class MyNamingStrategy extends DefaultNamingStrategy {
   ...
   @Override
   public  String tableName(String tableName) {
      return tableName+yearSuffixTable;
   }
   ...
}
Run Code Online (Sandbox Code Playgroud)

而且,当你想使用_year表时,你必须使用Hibernate创建一个覆盖rhe表名的会话:

  SessionFactory sessionFactory;
  Configuration config = new AnnotationConfiguration()
                         .configure("hibernate.cfg.xml")
                         .setNamingStrategy( new MyNamingStrategy () );
  sessionFactory = config.buildSessionFactory();
  session = sessionFactory.openSession();
Run Code Online (Sandbox Code Playgroud)

对于我的架构,我按年创建会话并将其存储到应用程序映射中以便在需要时进行访问.

谢谢.