无法通过仅在具有select权限的不同用户空间上的oracle数据库上的hibernate访问字段

时间:2011-07-30 00:11:18

标签: oracle hibernate privileges

我正在尝试使用Hibernate来访问来自不同用户空间的数据(我只有选择权限)。我有完整的应用程序在我的用户空间中运行表(所以配置是正确的)。当我尝试从不同的地方获取记录时用户空间,我能够看到列表的大小。但是无法访问该集合。

此外,当hibernate配置启动时,我可以看到它试图更改和更新,我想停止。它是oracle db。我想知道我在做什么错了因为我刚刚变大小但没有实际数据。

Jul 29, 2011 4:39:01 PM org.hibernate.tool.hbm2ddl.DatabaseMetadata getTableMetadata
INFO: table not found: INVENTORY.SWITCHDATA
SEVERE: Unsuccessful: create table INVENTORY.SWITCHDATA (SWITCH_ID number(19,0) not
 null, NAME varchar2(255), NPORTS number(10,0), NUSED number(10,0),     
VENDOR varchar2(255), STYPE varchar2(255), NET varchar2(255), primary key 
(SWITCH_ID))

Jul 29, 2011 4:39:01 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute

SEVERE: ORA-0: insufficient privileges

Jul 29, 2011 5:06:31 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute

INFO: schema update complete

Hibernate: select this_.SWITCHTYPE as y0_, this_.SWITCHTYPE as y1_ from 
INVENTORY.SWITCHDATA this_ group by this_.SType

100

我是否必须以其他方式通知用户空间库存,然后使用'inventory.tablename'命名我的表,或者我必须以某种方式告知休眠权限。

1 个答案:

答案 0 :(得分:0)

ORA-0: insufficient privileges错误,因为当hibernate启动时,他尝试创建和更新与映射相关的数据库表(hbm文件)。这是一个oracle数据库错误,您应该要求DBA向配置文件中使用的hibernate用户授予alter create,drop等权限。

如果您不希望hibernate自动更新数据库模式,您可以检查hibernate配置文件中的属性Hibernate.hbm2ddl.auto是否设置为validate。此属性的可能值为:validate |更新|创建|创建降。也许它在配置文件中设置为update。通过禁用表模式的自动生成,您将负责创建表,索引,约束等。

您可以在hibernate配置文件中使用属性hibernate.default_schemahbm.xml元素中的<Hibernate-mapping ...文件

来通知hibernate要使用的模式名称

参考文档

  

Hibernate.hbm2ddl.autoHibernate configuration
  hbm2ddl.auto选项打开自动生成数据库   模式直接进入数据库。这也可以关闭   删除配置选项,或使用重定向到文件   SchemaExport Ant任务的帮助。

     

hibernate.default_schema
  使用给定的模式/表空间限定非限定表名   生成SQL。 e.g.SCHEMA_NAME

     

5.1.2. Hibernate-mapping
  该元素有几个可选属性。架构和目录   attributes指定此映射中引用的表属于   命名的架构和/或目录。如果指定了它们,则为表名   将由给定的架构和目录名称限定。如果它们是   缺少,桌面名称将不合格。

相关问题