【问题标题】:Spring + Testcontainers + Jpa + Oracle database with multiple user/schemaSpring + Testcontainers + Jpa + 具有多个用户/模式的 Oracle 数据库
【发布时间】:2021-08-04 09:53:35
【问题描述】:

我有一个应用程序正在尝试使用测试容器进行测试。数据库是来自 testcontainers 的 oracle-xe。 属性文件具有属性jpa.hibernate.ddl-auto = true,用于自动发现模式。这里的问题是我有来自多个模式/用户的实体,并且似乎这不适用于 oracle-xe testcontainer(如果我从实体中的@Table 注释中删除 de 属性“模式”,它可以正常工作)。

我使用 schema.sql 文件作为解决方法来加载架构,它工作正常,但我想在没有这个文件的情况下实现同样的效果。 有谁知道为什么会发生这种行为以及如何解决它?

【问题讨论】:

    标签: java oracle spring-boot jpa testcontainers


    【解决方案1】:

    您可以创建自己的 Oracle XE Docker 映像,在其中创建各种模式,然后将此映像与 TestContainers 一起使用。

    【讨论】:

    • 这不适合我,因为我必须使用特定的 docker 映像并且它没有架构。
    • 因此您可以创建基于该图像的新图像。这就是在 Docker 中分层的目的
    【解决方案2】:

    如果这仍然是个问题...这是我的 2 美分。

    userschema 有区别吗? 如果是这样,您可能必须手动为模式创建用户(提示...创建用户会为给定的用户名创建模式)。 来自 Oracle 关于CREATE SCHEMA的官方文档

    注意:

    此语句实际上并未创建架构。甲骨文数据库 创建用户时自动创建架构(请参阅 CREATE 用户)。此语句允许您使用表和 无需发布即可查看并授予这些对象的权限 多个事务中的多个 SQL 语句。

    此外,您可能需要一些额外的 GRANT 等,以确保连接到数据库的用户和与架构相关的用户拥有足够的权限。

    例子:

    CREATE USER <USERNAME> IDENTIFIED BY <password>;
    GRANT UNLIMITED TABLESPACE TO <USERNAME>;
    GRANT CREATE SESSIONT TO <USERNAME>;
    GRANT CONNECT, RESOURCE, DBA TO <USERNAME>;
    

    仅供参考...我是,也没有声称自己是,绝不是 Oracle 数据库专家。因此,请与您的 DBA 确认;)


    关于 testcontainer 的 oracle DB 映像的额外信息

    在类似情况下,我使用 this 博客的部分内容创建了一个没有数据卷的 oracle-image。这允许数据库的初始化状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 2010-11-21
      • 2010-11-25
      • 2014-12-06
      • 1970-01-01
      • 2012-01-31
      相关资源
      最近更新 更多