如何在运行时配置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