如何在运行时配置JPA表名称? [英] How do I configure JPA table name at runtime?

查看:89
本文介绍了如何在运行时配置JPA表名称?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



正确现在我的类被配置为:

  @Entity 
@Table(name =loader_queue)
class LoaderQueue

我希望能够将dev1服务器指向loader_queue_dev1表,并将dev2服务器指向loader_queue_dev2表为例。



有没有一种方法可以在使用或不使用注释的情况下执行此操作?

I希望能够有一个单一的构建,然后在运行时使用类似于系统属性的东西来改变表名。

对于Hibernate 4.x,您可以使用自定义命名策略,它在ru处动态生成表名n时间。服务器名称可以由系统属性提供,因此您的策略可能如下所示:

  public class ServerAwareNamingStrategy extends ImprovedNamingStrategy {

@Override
public String classToTableName(String className){
String tableName = super.classToTableName(className);
返回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
/>


I have an issue where I have only one database to use but I have multiple servers where I want them to use a different table name for each server.

Right now my class is configured as:

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

I want to be able to have dev1 server point to loader_queue_dev1 table, and dev2 server point to loader_queue_dev2 table for instance.

Is there a way i can do this with or without using annotations?

I want to be able to have one single build and then at runtime use something like a system property to change that table name.

解决方案

For Hibernate 4.x, you can use a custom naming strategy that generates the table name dynamically at runtime. The server name could be provided by a system property and so your strategy could look like this:

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();
    }
}

And supply the naming strategy as a Hibernate configuration property:

<property 
    name="hibernate.ejb.naming_strategy" 
    value="my.package.ServerAwareNamingStrategy"
/>

这篇关于如何在运行时配置JPA表名称?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆