当前位置: 首页 > 面试题库 >

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

贺景胜
2023-03-14
问题内容

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

现在,我的班级配置为:

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


 类似资料:
  • 问题内容: 我实现了一个使用Oracle DB的Web应用程序(JEE6,EJB WebProfile)。我的问题是,我需要更改使用的数据库架构(名称),而无需重新编译/重新打包应用程序。因此,我想要的(这只是一个主意,也许有人有更好的主意),是在服务器内进行一些配置(JNDI),具体说明架构名称。但是,如何配置Eclipse Link在运行时使用其他模式名称? 细节: 目前,我使用该文件指定架构

  • 为什么有运行时配置? 我们通过 .umirc.js 做编译时的配置,这能覆盖大量场景,但有一些却是编译时很难触及的。 比如: 在出错时显示个 message 提示用户 在加载和路由切换时显示个 loading 页面载入完成时请求后端,根据响应动态修改路由 这些在编译时就很难处理,或者不能处理了。 配置方式 umi 约定 src 目录下的 app.js 为运行时的配置文件。 + src - ap

  • 运行时配置和配置的区别是他跑在浏览器端,基于此,我们可以在这里写函数、import 浏览器端依赖等等,注意不要引入 node 依赖。 配置方式 约定 src/app.js 为运行时配置。运行时配置的类型有三种,具体查看applypluginstype。 配置项 beforeRender beforeRender(lastOpts) 在渲染之前执行,执行action过程中显示 loading 配置的

  • 我使用这个命令运行我的spring应用程序-java-jar,但是当从IDE运行应用程序时,我需要添加运行配置,下面是显示我所添加内容的屏幕截图,但是它对我不起作用。

  • 问题内容: 我有hibernate.cfg.xml文件。 ..................... 这是文件中最有趣的部分。现在,我必须设置缺少的值:URL,用户名,密码。我正在尝试以这种方式: 但这只是从hibernate.cfg.xm加载我的配置,并且不更改任何属性… url,用户名,密码-是命令行参数,因此我必须在运行时设置它们。 问题答案: 尝试在这里打电话。 并且属性可能需要具有hib

  • 我试图在我的应用程序中实现jpa 发展能力 所以,我的DataConfig看起来像这样: 但是,当我尝试启动应用程序时,会出现错误消息。制造战争- 已连接到服务器[2018-09-26 09:54:32631]工件未命名:正在部署工件,请稍候。。。2018年9月26日09:54:34.460警告[RMI TCP连接(3)-127.0.0.1]组织。阿帕奇。公猫dbcp。dbcp2。基本资源工厂。g