Вопрос

Я меняю свою базу данных с PostgreSQL на Oracle 11g.Я использую hibernate 3.0 с Java и Struts.

С 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:недопустимое имя таблицы

Кто-нибудь может помочь мне в этом вопросе?

Спасибо.

Это было полезно?

Решение

Скорее всего, это один из двух случаев:

  1. Вы подключаетесь как пользователь, не являющийся владельцем таблицы, и не можете разрешить имя.
  2. Существует проблема с чувствительностью к регистру либо в ссылке на имя таблицы в коде, либо в ее фактическом имени.

Если вы не являетесь владельцем таблицы (но у вас есть разрешения на доступ к ней!), вам потребуется либо иметь синоним Oracle, который преобразует ссылку на MYTABLE в THE_ACTUAL_OWNER.MYTABLE, либо ссылаться на квалификатор схемы непосредственно в вашем коде.

Второй случай менее вероятен, но иногда сценарии создания таблиц создают объекты в oracle с двойными кавычками вокруг имени объекта, что позволяет создать идентификатор в смешанном регистре - CREATE TABLE «myTable» создаст идентификатор в смешанном регистре, который затем должен быть на который ссылается строка со смешанным регистром.

Чтобы предоставить нам дополнительную информацию, подключитесь к какому-либо специальному инструменту SQL от имени того же пользователя, что и ваше приложение, и опубликуйте результаты:

выберите владельца, имя_таблицы из всех_таблиц, где имя_таблицы = 'theNameOfTheTableOfinterest';

Другие советы

dpbradley, вероятно, правильный, однако я только что столкнулся со следующей проблемой с 11g и hibernate:- oracle 11g позволит вам определить таблицу с именем размером более 30 символов - однако на самом деле вы не можете ссылаться на эту таблицу в инструкции SQL, потому что ее имя слишком длинное.

  • Автоматически сгенерированный DDL-файл Hibernate, похоже, не заботится и не предупреждает, когда он генерирует DDL
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top