Hibernate:通过注释具有动态表名的数据对象

Hibernate: Data Object with a dynamic table name by Annotations(Hibernate:通过注释具有动态表名的数据对象)
本文介绍了Hibernate:通过注释具有动态表名的数据对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有一个与表关联的 Hibernate 数据类;想象像这样的实体Person:

I have a Data Class for Hibernate associated to a table; imagine the Entity Person like this:

 @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... 是否可以不创建新的数据对象?也许通过参数...?我不知道.

I need to create historic tables by years of this table: Person2010, Person2011, Person2012... Is it possible without creating new Data Objects? Maybe by a parameter...? I dont know.

Entity类是一样的,表名和构造函数都变了.

The Entity class is the same, changing the table name and the constructor.

推荐答案

另一种架构,更复杂但优雅:

Another one Architecture, more complez but elegant:

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

YES, You can change the table names using NamingStrategies:

public class MyNamingStrategy extends DefaultNamingStrategy {
   ...
   @Override
   public  String tableName(String tableName) {
      return tableName+yearSuffixTable;
   }
   ...
}

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

And, when you wanna to use the _year tables, you must to create a session with Hibernate that override rhe table names:

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

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

For my architecture I create a session by year and store it into Application map for access when I need it.

谢谢.

这篇关于Hibernate:通过注释具有动态表名的数据对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)