0

我正在将我的数据库从 PostgreSQL 更改为 Oracle 11g。我正在使用带有 Java 和 Struts 的休眠 3.0。

PostgreSQL 一切正常。

我在 hibernate.cfg.xml 文件中更改了以下内容。

<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <property name="hibernate.connection.password">mypassword</property>
    <property name="hibernate.connection.url">jdbc:Oracle:thin:@192.168.1.1:1521/mydb</property>
    <property name="hibernate.connection.username">my_user</property>
    <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>

其他一切都与 Postgresql 中的相同。

我正在使用 ojdbc5.jar

现在,当我运行我的页面时,它给了我以下错误。

ORA-00903: 无效的表名

有人可以帮我解决这个问题吗?

谢谢。

4

2 回答 2

4

dpbradley 可能是正确的,但是,我刚刚在 11g 和休眠中遇到了以下问题: - oracle 11g 将允许您定义一个名称大于 30 个字符的表 - 但是,您实际上不能在 SQL 中引用该表声明,因为它的名字太长了。

  • Hibernate 自动生成的 DDL 在生成 DDL 时似乎并不关心或警告
于 2009-08-06T00:14:03.317 回答
3

这很可能是以下两种情况之一:

  1. 您以表所有者以外的用户身份连接,无法解析名称。
  2. 在代码中对表名的引用或其实际名称中存在区分大小写的问题。

如果您不是表的所有者(但有权访问它!),您需要有一个 Oracle 同义词,可以将对 MYTABLE 的引用转换为 THE_ACTUAL_OWNER.MYTABLE,或者直接在代码中引用模式限定符。

第二种情况不太可能,但有时表创建脚本会在 oracle 中创建对象,并在对象名称周围加上双引号,这将允许创建混合大小写标识符 - CREATE TABLE "myTable" 将创建混合大小写标识符,然后必须是由大小写混合的字符串引用。

为了向我们提供更多信息,请以与您的应用程序相同的用户身份连接某种特定的 SQL 工具,并发布以下结果:

select owner, table_name from all_tables where table_name = 'theNameOfTheTableOfinterest';

于 2009-07-28T13:21:47.603 回答