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

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

袁永贞
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 更改表名称: 而且,当

  • 问题内容: 我想使用联接表在两个表之间建立一对多关系。 最后,我想使用Hibernate批注执行此操作。 我找到了一些使用xml映射执行此操作的示例,但没有带注释的示例。 我相信这就是需要创建表的方式 问题答案: 不要寻找例子。阅读官方文档: 另外,请注意,这是单向一对多关联的默认设置。因此,如果默认的表名和列名适合您,您甚至不必提供注释。

  • 问题内容: 我有一张桌子DEAL和一张桌子DEAL_TYPE。我想映射以下代码: 问题在于数据已经存在于数据库中。而且我很难将类映射到数据库。 数据库看起来像这样: 我知道我可以在交易类型之间使用简单的@OneToMany关系,但是我更喜欢使用枚举。这可能吗? 我几乎可以通过使用EnumType.ORDINAL类型来使其工作。但不幸的是,我的交易类型表中的ID不是连续的,并且不是从1开始。 有什么

  • 问题内容: 是否可以在运行时关闭每个类的某些约束/注释?例如,如果我想对一个字段进行检查,那可能吗? 这将使测试更容易查看某个约束是否正确正确触发,因为我可以关闭所有其他约束,而只需检查一个约束即可。 问题答案: 是否可以在运行时关闭每个类的某些约束/注释?例如,如果我想对firstName字段进行@NotNull检查,那可能吗? 不它不是。Bean验证未定义此类功能。Hibernate Vali

  • 问题内容: 我收到以下异常: 实体类头: 在hibernate.cfg.xml中: 在测试课程中: 我在没有注释的情况下进行了此工作(例如:在映射文件中使用映射),但是简单地使用JPA注释来声明映射似乎更直观-但我似乎无法使其正常工作。 我在这里做错了什么?我要做什么甚至有可能吗?看来我不是唯一遇到这种情况的人,请参阅:这里。 我正在使用hibernate3.5.6-FINAL FWIW。 TIA

  • 问题内容: 如果您正在使用xml映射,那么liquibase是hibernate的 hbm2ddl_auto 属性的完美替代方案。但是我使用的是JPA注释(hibernate注释)。那么可以使用liquibase吗? 问题答案: 是的,Liquibase使用了hibernate的元数据类,无论您使用xml映射还是注释,它们都是相同的。您确实需要一个hibernate配置文件来指向liquibase