Tri*_*Man 4 java orm hibernate jpa hibernate-mapping
我有一个问题,我只有一个数据库可供使用,但我有多个服务器,我希望他们为每个服务器使用不同的表名.
现在我的班级被配置为:
@Entity
@Table(name="loader_queue")
class LoaderQueue
Run Code Online (Sandbox Code Playgroud)
我希望能够让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();
}
}
Run Code Online (Sandbox Code Playgroud)
并将命名策略作为Hibernate配置属性提供:
<property
name="hibernate.ejb.naming_strategy"
value="my.package.ServerAwareNamingStrategy"
/>
Run Code Online (Sandbox Code Playgroud)