如何在运行时配置JPA表名?

我有一个问题,我只能使用一个数据库,但我有多个服务器,希望它们为每个服务器使用不同的表名。

现在,我的班级配置为:

@Entity

@Table(name="loader_queue")

class LoaderQueue

我希望能够使dev1服务器指向loader_queue_dev1表,例如dev2服务器指向loader_queue_dev2表。

有没有可以使用注释或不使用注释的方法?

我希望能够拥有一个单一的构建,然后在运行时使用诸如系统属性之类的东西来更改该表名。

回答:

对于Hibernate

4.x,可以使用自定义命名策略,该策略在运行时动态生成表名。服务器名称可以由系统属性提供,因此您的策略应如下所示:

public class ServerAwareNamingStrategy extends ImprovedNamingStrategy {

@Override

public String classToTableName(String className) {

String tableName = super.classToTableName(className);

return resolveServer(tableName);

}

private String resolveServer(String tableName) {

StringBuilder tableNameBuilder = new StringBuilder();

tableNameBuilder.append(tableName);

tableNameBuilder.append("_");

tableNameBuilder.append(System.getProperty("SERVER_NAME"));

return tableNameBuilder.toString();

}

}

并提供命名策略作为Hibernate配置属性:

<property 

name="hibernate.ejb.naming_strategy"

value="my.package.ServerAwareNamingStrategy"

/>

以上是 如何在运行时配置JPA表名? 的全部内容, 来源链接: utcz.com/qa/411313.html

回到顶部