当前位置: 首页 > 面试题库 >

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

邹嘉荣
2023-03-14
问题内容

我有一个与表关联的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();

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

谢谢。



 类似资料:
  • 问题内容: 我有一个与表关联的Hibernate数据类;想象这样的实体 人 : 我需要按此表的年份创建历史记录表 :Person2010,Person2011,Person2012 …是否可以不创建新的数据对象?也许是通过参数…?我不知道。 实体类相同,只是更改了表名和构造函数。 问题答案: 另一个体系结构,更复杂但更优雅: 是的 ,您可以使用 NamingStrategies 更改表名称: 并且

  • 我正在使用MySQL数据库和Spring数据。每次我试图保存数据时,都会出错 编译后得到这个错误后,我发现数据库内部添加了两个新的实体:"image_path"和"upload_date"。我没有编写任何代码来做这样的事情。 我再次编译以查看image_path列是否插入了ImagePath实体应该插入的数据。 实体 胸腺形态 控制器 Spring数据存储库 SQl数据库 为什么会在数据库中自动创

  • 问题内容: 我如何做到这一点: 问题答案: 请改用方括号表示法。 或者,在现代JavaScript中:

  • 我有一个关于Spring注释的问题。在我的(学习)项目中,我定义了两个类,另一个类有两个属性,每种类型一个。为了生成一个错误,我在XML中定义了两个相同类类型的beans,并且在setter方法中使用了@Autowired注释。大概是这样的: 在主类中,我获取此 Bean 的应用程序上下文的实例,并打印覆盖 toString 方法的属性的内容,这是一个简单的测试。我已经读到Spring自动连线注释

  • 问题内容: 我正在尝试执行这样的mysql查询 它显示这样的错误 我该如何实现? 问题答案: 在查询中动态表名的使用最好与 Prepared Staments一起使用 ,在mysql中也可以使用串联功能 您也可以针对删除查询执行此操作

  • 问题内容: 大家好,我有一个要使用的可怕数据库,而linqtosql是我从中检索数据的选项。任何试图通过基于用户选择抛出不同的表名来重用函数的人,据我所知,没有办法修改DataContext查询中的TEntity或。 这是我当前的代码。 我想用Enumerable记录填充ViewData。 问题答案: 您可以在DataContext实例上调用ExecuteQuery方法。您将要调用采用Type实例