Spring + Testcontainers + Jpa + Oracle 数据库与多个用户/模式

问题描述

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

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

解决方法

您可以创建自己的 Oracle XE Docker 映像,在其中创建各种架构,然后将此映像与 TestContainers 结合使用。

,

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

用户架构是否不同? 如果是这样,您可能必须手动为架构创建用户(提示...创建用户会为给定的用户名创建架构)。 来自 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 数据库专家,也不声称自己是一名 Oracle 数据库专家。因此,请咨询您的 DBA 以确保 ;)


考虑到用于 testcontainer 的 oracle DB 映像的额外信息

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