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

标签 java hibernate jpa orm hibernate-mapping

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

现在我的类(class)配置为:

@Entity
@Table(name="loader_queue")
class LoaderQueue

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

有没有办法在使用或不使用注释的情况下做到这一点?

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

最佳答案

对于 Hibernate 4.x,您可以使用 custom naming strategy在运行时动态生成表名。服务器名称可以由系统属性提供,因此您的策略可能如下所示:

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"
/>

关于java - 如何在运行时配置 JPA 表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30987497/

相关文章:

JavaFX:为节点创建自定义数据属性

java - 在添加分隔符后在Java中分割字符串

java - 为什么在jsp中上传文件后无法访问请求中的参数?

mysql - hibernate n :m extractHashCode throws NullPointerException

java - hibernate中对utf8数据的支持

java - 如果不用于 DDL 生成,Hibernate @JoinColumn(nullable = false) 是否多余?

java - hibernate 多模式映射

java - 局部变量可能尚未初始化构造函数/方法

jpa - 持久化一对多关系

java - 有没有办法让 Play 框架和 JPA 在列名中使用下划线?