我有一个问题,我只能使用一个数据库,但我有多个服务器,希望它们为每个服务器使用不同的表名。
现在,我的班级配置为:
@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" />