2013-03-07 2 views
1

Я только что начал использовать ORMLite и использовал дома, чтобы экспериментировать с MySQL. Теперь я решил попробовать использовать его в Oracle, но заметил проблему с чувствительностью к регистру имен столбцов.ORMLite и Oracle - имена столбцов, чувствительных к регистру

При использовании TableUtils.createTableIfNotExists() он генерирует операторы CREATE, которые обертывают имена таблиц и столбцов в двойных кавычках. Например:

CREATE TABLE "T_SUBURB" ("ID" NUMERIC, "Описание" VARCHAR2 (255) NOT NULL, "gnaf" VARCHAR2 (255), первичный ключ ("ID"))

Это означает, что когда я пытаюсь запросить базу данных в Oracle SQL Developer, мне нужно использовать двойные кавычки, чтобы указать имена таблиц и столбцов. Это не похоже на использование MySQL.

Должен признаться, что я новичок в SQL, но при попытке запросить их не представляется естественным обертывать каждое имя таблицы или столбца в двойных кавычках. Рассматривая реализацию OracleDatabaseType, кажется, что в этом примере имя сущности намеренно двойным образом цитируется.

Кто-нибудь знает, как отключить это поведение?

В настоящее время я выполняю версию 4.43 от maven-central и Oracle 11g. Приветствия.

ответ

1

При использовании TableUtils.createTableIfNotExists() он генерирует операторы CREATE, которые обертывают имена таблиц и столбцов в двойных кавычках.

Это правильно. Задача для ORMLite заключается в том, что она должна защищать от специальных символов или зарезервированных слов как имена полей и таблиц. Такие слова, как "index" или "create", могут создавать мелкие имена полей, но будут вызывать недопустимый SQL.

Однако, в соответствии с моим чтением OracleDatabaseType будет необходимо генерировать прописные имена полей:

@Override 
public boolean isEntityNamesMustBeUpCase() { 
    return true; 
} 

Если поле создается как "description" то не так. Вместо этого работает DESCRIPTION? ORMLite генерирует вашу схему и использует URI Oracle JDBC? Что-то вроде:

jdbc:oracle:... 

Если вы не используете JDBC URI, как что то ORMLite не может использовать тип базы данных Oracle для создания таблиц. Если вам необходимо силы его использовать Oracle, вы можете создать свой

ConnectionSource connectionSource = 
    new JdbcConnectionSource(databaseUrl, new OracleDatabaseType()); 

Надеется, что это помогает.

+0

Hi Grey, Thankyou для вашего ответа, вы правы - имена таблиц в верхнем регистре, я просто записывал пример из памяти. Я комментирую создание недействительного SQL, однако ORMLite - это первый ORM, который я видел, который не сбой при создании, потому что используется зарезервированное слово или просто сбой при попытке использовать SQL. Мне интересно, может ли быть опция, которая позволяет мне указать, следует ли использовать экранирование имен или нет (по умолчанию true соответствует обратной совместимости). Таким образом разработчик может выбрать, хотят ли они эту функциональность или нет. – Aidos

+0

Уверяю вас, что спящий режим и другие современные ОРМ делают то же самое. Проблема в том, что вы не хотите использовать прописные буквы или мне что-то не хватает @Aidos? – Gray