gpt4 book ai didi

java - 如何覆盖JPA实体的@Table.catalog值?

转载 作者:行者123 更新时间:2023-11-30 07:58:57 25 4
gpt4 key购买 nike

当我使用 IntelliJ 从现有数据库模式生成持久性映射时,它会放置 catalog值作为 @Table 的一部分注解。不幸的是,数据库实例的名称中包含 dev/test/prod 环境的名称,虽然我可以使用传递给 EntityManagerFactory 的映射覆盖连接字符串。我仍然得到Invalid object name 'BAR_DEV.dbo.FOO'当对 BAR_TEST 执行查询时实例。

我可以动态覆盖 catalog在运行时值而不进行全局搜索并替换以在实体生成后手动删除它?

@Entity
@Table(name = "FOO", schema = "dbo", catalog = "BAR_DEV")
public class Foo{ /* ... */ }

最佳答案

不,不可能直接使用标准 JPA。

但是,我在项目中使用的解决方案是定义多个持久性单元,每个持久性单元针对特定的环境。您可以覆盖 orm.xml 文件中的任何数据库映射,甚至为所有实体设置默认目录或架构。下一步是动态检索正确的 EntityManager - 如果您使用 Java EE,我建议使用 @Inject 注入(inject)并创建一个生产者,该生产者返回指定环境的特定 EM。

关于java - 如何覆盖JPA实体的@Table.catalog值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32227224/

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