Ответ 1
Это может быть проблема чувствительности к регистру. Обычно таблицы и столбцы не чувствительны к регистру, но они будут, если вы используете кавычки. Например:
create table bad_design("goodLuckSelectingThisColumn" number);
Я вижу ошибку при выполнении запроса hibernate sql.
java.sql.SQLException: ORA-00904: "table_name". "column_name": недопустимый идентификатор
Когда я открываю таблицу в sqldeveloper, столбец присутствует.
Ошибка происходит только в PROD, а не в DEV.
Что я должен проверить?
Это может быть проблема чувствительности к регистру. Обычно таблицы и столбцы не чувствительны к регистру, но они будут, если вы используете кавычки. Например:
create table bad_design("goodLuckSelectingThisColumn" number);
Oracle будет бросать ORA-00904
, если пользователь не имеет соответствующих разрешений для объектов, участвующих в запросе.
Это случилось со мной, когда я случайно определил два объекта с одинаковой постоянной таблицей базы данных. В одной из таблиц рассматриваемая колонка существовала, а другая - нет. При попытке сохранить объект (типа, ссылающегося на неправильную базовую таблицу базы данных), эта ошибка возникла.
Введите имя столбца между цитатой DOUBLE, как в "columnName".
Если сообщение об ошибке показывает другой случай с символом, чем то, что вы написали, очень вероятно, что ваш клиент sql выполнил автоматическое преобразование для вас. Используйте двойную кавычку, чтобы обойти это. (Это работает на Squirrell Client 3.0).
Это потому, что одна из БД столбца была создана с ", что делает его имя чувствительным к регистру.
Имя столбца таблицы Oracle: GoodRec Улей не может распознать чувствительность к регистру: ОШИБКА была брошена - Вызвано: java.sql.SQLSyntaxErrorException: ORA-00904: "GOODREC": недопустимый идентификатор
Решение. Переименуйте имя столбца Oracle во все кепки.
проверить позицию аннотации столбца в классе java для поля Например, рассмотрим одну таблицу с именем STUDENT с 3 столбцами (Name, Roll_No, Marks).
Затем убедитесь, что вы добавили ниже аннотацию столбца до метода Getter вместо метода Setter. Это решит проблему ур @Column (name = "Name", length = 100)
**@Column(name = "NAME", length = 100)
public String getName() {**
return name;
}
public void setName(String name) {
this.name= name;
}
Вы сравнили определения таблиц в Prod и Dev?
И когда вы запускаете его в SQL Developer, выполняете ли вы запрос в Prod (той же базе данных, что и приложение), и с тем же пользователем?
Если есть дополнительные столбцы, которые вы добавляете (с помощью команды alter), и эти изменения еще не продвигаются в prod, эта проблема возможна.
Можете ли вы опубликовать определение таблицы и ваш фактический запрос?
Я использую Toad для Oracle, и если таблица принадлежит другому имени пользователя, кроме того, с которым вы вошли в систему, и у вас есть доступ к чтению таблицы, вам все равно может потребоваться добавить первоначального владельца таблицы в имя таблицы.
Например, допустим, что имя владельца таблицы - "OWNER1", и вы вошли в систему как "USER1". Этот запрос может дать вам ошибку ORA-00904:
select * from table_name where x='test';
Префикс table_name владельцем таблицы устранил ошибку и дает результаты:
select * from
Проверьте учетные данные имени пользователя, используемые для входа в базу данных. (persistence.xml??). В основном проблема заключается в том, что имя пользователя\пароль, используемый для входа в базу данных, не имеет видимости для объекта (в этом случае имя таблицы). (попробуйте войти в sql-разработчик, используя то же имя пользователя\пароль, доступный в вашем источнике данных)