gpt4 book ai didi

java - Hibernate @Table 注释中的动态模式

转载 作者:搜寻专家 更新时间:2023-11-01 03:35:18 24 4
gpt4 key购买 nike

假设您在两个环境中有四个 MySQL 数据库模式:

  • foo(产品数据库),
  • bar(foo db 正在进行的重组),
  • foo_beta(测试数据库),
  • bar_beta(新结构的测试数据库)。

进一步,假设您有一个在实体上带有 Hibernate 注释的 Spring Boot 应用程序,如下所示:

@Table(name="customer", schema="bar")
public class Customer { ... }

@Table(name="customer", schema="foo")
public class LegacyCustomer { ... }

在本地开发时没问题。您模仿本地环境中的生产数据库表名。但是随后您尝试在功能上线之前对其进行演示,并希望将其上传到服务器。您在另一个端口上启动应用程序的另一个实例,并意识到此副本需要指向“foo_beta”和“bar_beta”,而不是“foo”和“bar”!怎么办!

如果您在您的应用程序中只使用一个架构,您可以完全放弃架构并指定 hibernate.default_schema,但是......您正在使用两个。这样就结束了。

Spring EL - 例如。 @Table(name="customer", schema="${myApp.schemaName}") 不是一个选项——(甚至还有一些傲慢的“没人需要这个”评论),所以如果动态定义模式是荒谬的,那该怎么办呢?除了,你知道,一开始就不要进入这种荒谬的场景。

最佳答案

我已经通过向 Hibernate 添加对我自己的模式注释的支持来解决此类问题。通过扩展 LocalSessionFactoryBean(或 Hibernate 3 的 AnnotationSessionFactoryBean)来实现并不难。注释看起来像这样

@Target(TYPE)
@Retention(RUNTIME)
public @interface Schema {

String alias() default "";

String group() default "";

}

使用示例

@Entity
@Table
@Schema(alias = "em", group = "ref")
public class SomePersistent {

}

并且 aliasgroup 的每个组合的模式名称在 spring 配置中指定。

关于java - Hibernate @Table 注释中的动态模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33863216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com