Java Hibernate无法在Oracle中不同架构之间创建外键
我有一个java7+Spring3.2.0+hibernate3应用程序,它使用了Java Hibernate无法在Oracle中不同架构之间创建外键,java,spring,oracle,hibernate,postgresql,Java,Spring,Oracle,Hibernate,Postgresql,我有一个java7+Spring3.2.0+hibernate3应用程序,它使用了Postgresql数据库。现在我必须迁移此应用程序以使用最新的Oracle 当启动时,我将hbm2ddl设置为“创建”时,表被正确创建,但是所有涉及位于不同架构中的表的外键都失败,并出现错误:ORA-00942:表或视图不存在 数据库相当大,涉及许多不同的模式。我无法更改数据库的结构。以下是映射的示例: @Entity
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;
如果活动
用户还需要更改活动表,您还需要授予更新
、插入
和删除
权限
您需要为活动
用户想要访问的每个表执行此操作