Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate无法在Oracle中不同架构之间创建外键_Java_Spring_Oracle_Hibernate_Postgresql - Fatal编程技术网

Java Hibernate无法在Oracle中不同架构之间创建外键

Java Hibernate无法在Oracle中不同架构之间创建外键,java,spring,oracle,hibernate,postgresql,Java,Spring,Oracle,Hibernate,Postgresql,我有一个java7+Spring3.2.0+hibernate3应用程序,它使用了Postgresql数据库。现在我必须迁移此应用程序以使用最新的Oracle 当启动时,我将hbm2ddl设置为“创建”时,表被正确创建,但是所有涉及位于不同架构中的表的外键都失败,并出现错误:ORA-00942:表或视图不存在 数据库相当大,涉及许多不同的模式。我无法更改数据库的结构。以下是映射的示例: @Entity

我有一个java7+Spring3.2.0+hibernate3应用程序,它使用了
Postgresql
数据库。现在我必须迁移此应用程序以使用最新的Oracle

当启动时,我将hbm2ddl设置为“创建”时,表被正确创建,但是所有涉及位于不同架构中的表的外键都失败,并出现错误:
ORA-00942:表或视图不存在

数据库相当大,涉及许多不同的模式。我无法更改数据库的结构。以下是映射的示例:

@Entity                                                                                     
@Table(name="brands", schema="live", uniqueConstraints=@UniqueConstraint(columnNames={"name"}))
public class Brand implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="brands_seq_gen")
    @SequenceGenerator(name="brands_seq_gen", sequenceName="brands_seq",schema="live",allocationSize=1)
    @Column(name = "id")
    private Integer id;

    ...
}


@Entity                                                                                     
@Table(name="campaign_group", schema="campaign")
public class CampaignGroup implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="campaign_group_seq_gen")
    @SequenceGenerator(name="campaign_group_seq_gen", sequenceName="campaign_group_seq",schema="campaign",allocationSize=1)
    @Column(name = "id")
    protected Long id;

    @ManyToOne(fetch = FetchType.LAZY, cascade={CascadeType.MERGE})
    @JoinColumn(name="brand_id")
    protected Brand brand;
在启动时,表被正确创建,并且它们位于数据库中,但随后出现以下错误:

DEBUG org.hibernate.tool.hbm2ddl.SchemaExport [] - alter table campaign.campaign_group add constraint FKB1854E905348D509 foreign key (brand_id) references live.brands
ERROR org.hibernate.tool.hbm2ddl.SchemaExport [] - Unsuccessful: alter table campaign.campaign_group add constraint FKB1854E905348D509 foreign key (brand_id) references live.brands
ERROR org.hibernate.tool.hbm2ddl.SchemaExport [] - ORA-00942: table or view does not exist
我已经用
SQL:CREATE USER
campaign
在系统上通过
dsa123 QUOTA UNLIMITED
标识了所有用户/模式

我使用系统用户通过应用程序和hbm2ddl创建数据库


有人知道为什么会失败吗?系统似乎也在其他模式上提供了所有选项,也许我在Oracle注释中遗漏了Postgres不需要的东西?

在Oracle中,模式基本上与用户相同。因此,用户
活动
需要具有必要的权限
选择
参考
来自
实时
用户的表格

LIVE
用户身份登录时,您需要执行以下操作:

grant select, reference on brands to campaign;
如果
活动
用户还需要更改活动表,您还需要授予
更新
插入
删除
权限

您需要为
活动
用户想要访问的每个表执行此操作