Позвольте мне показать вам проблему на следующих сценариях:
У меня есть объект с именем столбца VERSION# с суффиксом типа hash, и я хотел бы провести некоторое тестирование с этим объектом в базе данных h2.
Столбец взят из официальной таблицы словаря Oracle USER_TYPE_VERSIONS, поэтому его нельзя изменить.
Однако h2 не поддерживает такие имена столбцов и, следовательно, не работает во время выполнения теста.
Можно ли как-нибудь с этим справиться? Например, замена имени столбца в профиле h2 на VERSION или любой другой обходной путь?
Потому что есть официальная таблица Oracle с таким именем столбца. Извините, добавлю выше для лучшего понимания.
Вы пробовали выйти из #?
К сожалению, это не работает. По-прежнему та же ошибка, что таблица не найдена по диалекту h2.
Создать вид и сопоставить с ним свою сущность?
Я бы предпочел другой обходной путь, не влияющий на сторону базы данных Oracle. Чтобы таблица оставалась как есть. Возможно, создать объект под профилем h2, где проблемный столбец должен быть без символа решетки. Тогда h2 сможет его правильно загрузить. Не уверен.
Вы можете переопределить что угодно с помощью файла orm.xml. Вам просто понадобится механизм, который будет активен только для H2. docs.jboss.org/hibernate/stable/annotations/reference/en/htm l /…. См. Также stackoverflow.com/q/8750777/1356423
Это интересно. Я посмотрю и дам тебе знать в следующий раз.
Решение состоит в том, что столбец VERSION# необходимо экранировать кавычками в классе модели примерно так:
@Entity
@Table("USER_TYPE_VERSIONS")
public class UserTypeVersion {
@Column("\"VERSION#\"")
private String version;
...
}
Наконец, спящий режим теперь может загружать такой объект в базу данных h2. Он узнаваем сам по себе. Таким образом следует заменить любые специальные символы.
Примечание: не забудьте упомянуть о таком изменении также в data.sql, если у вас есть тестовые данные.
insert into USER_TYPE_VERSIONS("VERSION#") values ("IT WORKS NOW!");
Почему вы хотите включить хэш в имя столбца?