проблема с гибернацией oracle 11g
Вопрос
Я меняю свою базу данных с 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:недопустимое имя таблицы
Кто-нибудь может помочь мне в этом вопросе?
Спасибо.
Решение
Скорее всего, это один из двух случаев:
- Вы подключаетесь как пользователь, не являющийся владельцем таблицы, и не можете разрешить имя.
- Существует проблема с чувствительностью к регистру либо в ссылке на имя таблицы в коде, либо в ее фактическом имени.
Если вы не являетесь владельцем таблицы (но у вас есть разрешения на доступ к ней!), вам потребуется либо иметь синоним Oracle, который преобразует ссылку на MYTABLE в THE_ACTUAL_OWNER.MYTABLE, либо ссылаться на квалификатор схемы непосредственно в вашем коде.
Второй случай менее вероятен, но иногда сценарии создания таблиц создают объекты в oracle с двойными кавычками вокруг имени объекта, что позволяет создать идентификатор в смешанном регистре - CREATE TABLE «myTable» создаст идентификатор в смешанном регистре, который затем должен быть на который ссылается строка со смешанным регистром.
Чтобы предоставить нам дополнительную информацию, подключитесь к какому-либо специальному инструменту SQL от имени того же пользователя, что и ваше приложение, и опубликуйте результаты:
выберите владельца, имя_таблицы из всех_таблиц, где имя_таблицы = 'theNameOfTheTableOfinterest';
Другие советы
dpbradley, вероятно, правильный, однако я только что столкнулся со следующей проблемой с 11g и hibernate:- oracle 11g позволит вам определить таблицу с именем размером более 30 символов - однако на самом деле вы не можете ссылаться на эту таблицу в инструкции SQL, потому что ее имя слишком длинное.
- Автоматически сгенерированный DDL-файл Hibernate, похоже, не заботится и не предупреждает, когда он генерирует DDL