С проектом Spring JDBC, то для вызова базы данных конкретных через JDBC интерфейсов, класс реализации ResultSetMetaData для извлечения возвращает базу данных набора результатов.
При разработке проекта, показало, что использование псевдонимов в MySQL никоим образом не были решены должным образом, это означает, что, в дополнение к полю дается псевдоним не в силе, взять поле оригинальное имя поля. Так, например, user_name специально, чтобы индивидуальный названный user_name_old, конечный результат не возвращается псевдоним user_name_old, но ранее известный как user_name.
Код отслеживания найдено ResultSetMetaData.getColumnName (INT столбца) наличие некоторого специфики процесса логика, реализованный в JDBC в MySQL.
общественная Строка getColumnName ( ИНТ столбец) бросает SQLException { если ( это .useOldAliasBehavior) { // ложный возврат этого .getField (колонка) .getName (); } Еще { Имя Строка = это .getField (столбец) .getNameNoAliases (); // 取非别名 возвращение имя! = NULL && name.length () == 0? это .getField (колонка) .getName (): название; } }
Поскольку this.useOldAliasBehavior свойство является ложным, поэтому окончательное принятие еще логика также метод левого Field.getNameNoAliases ().
общественности Строка getNameNoAliases () бросает SQLException { если ( это .useOldNameMetadata) { // ложное возвращение этого .getName (); } Еще { вернуть это .connection! = NULL && это .connection.versionMeetsMinimum (4, 1, 0)? это .getOriginalName (): это .getName (); } }
Таким образом, мы, наконец, найти проблему к свойству this.useOldAliasBehavior, который может быть сконфигурирован с помощью JDBC драйверов адреса.
useOldAliasMetadataBehavior = верно
Полный адрес привода должен выглядеть следующим образом:
JDBC: MySQL: // ? локальный / TestDB useUnicode = истина и characterEncoding = UTF-8 & zeroDateTimeBehavior = convertToNull & useOldAliasMetadataBehavior = верно
Добавить в собственность, вы обнаружите, что эта проблема была решена.
«Я не могу грустно сидеть вами.»