我有一个数据库,其中包含为用户A创建的表。用户B被授予对这些表的CRUD访问权限。在 SQL 查询中,用户 B 可以使用完全限定名称 A.TABLE 引用架构 A 上的表。应用程序将使用用户B来操作这些表。
但是,当我尝试使用用户 B 连接为应用程序生成 JPA 实体类时,JPA 向导不允许我选择表所在的架构 A 。我通过在用户 B 连接的 SQL 查询中使用完全限定的表名 A.FOO 来确保授权正确。
我尝试使用同义词如下
create or replace synonym B.FOO FOR A.FOO;
但是JPA工具仍然找不到表。我也不想使用用户 A 连接生成表。如何从不同模式正确生成实体?
最佳答案
我不知道以下“技巧”(基本上是巢中的布谷鸟)是否有效,但这就是我曾经使用过的方法(尽管不是在 JPA 中):假设你从头开始(即删除那个同义词)。然后使用 CTAS 为 A 拥有的表创建一个空 (where 1 = 2
) 表(在架构 B 中):
create table foo as select * from a.foo where 1 = 2;
现在尝试做您正在做的事情 - JPA 向导应该看到 FOO 表,因为它现在属于 B。完成后,
drop table foo;
create synonym foo for a.foo;
看看一切是否按预期工作。祝你好运!
关于java - JPA:如何从另一个模式生成实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51379490/