在运行时将表名称传递给实体的@Table注释Hibernate

时间:2016-01-19 09:51:32

标签: java mysql hibernate jpa

我有下一个问题:我在数据库中有几个表,不知何故我需要从其中一个查询,但只有在运行时我才会知道所需表的名称,所以有可能通过表名为运行时实体的@Table注释?所有这些表都具有完全相同的模式。唯一的区别 - 名称(BILLING_DATA_2016_1,BILLING_DATA_2015_12等)。有人知道如何动态传递表名?或者可能是查询和继承的一些黑客?

1 个答案:

答案 0 :(得分:0)

您可以尝试HibernateInterceptor。将{BILLING_DATA_PLACEHOLDER}字符串放入@Table注释中,然后立即替换它

public class HibernateInterceptor extends EmptyInterceptor {
@Override
    public String onPrepareStatement(String sql) {
          String prepedStatement = super.onPrepareStatement(sql);
          prepedStatement = prepedStatement.replaceAll("{BILLING_DATA_PLACEHOLDER}", theRealSchemaName);
          return prepedStatement;
    }
}

没有尝试过