Проект, над которым я работаю (который использует Java, Spring, Hibernate), недавно был изменен с Oracle на MySQL. Есть несколько случаев, когда некоторые свойства в коде являются зарезервированными словами в MySQL, например, «release».
Существует несколько решений: 1) переименовать свойства в коде и последующих методах получения / установки, а также обновить код, который вызывает эти методы; 2) аннотировать свойство в коде с помощью @Column (name = "` release` ") , Это заставляет hibernate заключать в кавычки имя при обращении к базе данных.
Я бы предпочел держаться подальше от первого подхода, чтобы уменьшить вероятность взлома большего количества вещей. Второй подход - «хорошо», за исключением того, что он становится специфичным для MySQL. В нашей дев. В настройках мы используем HSQL, которому не нравятся запятые в именах этих столбцов.
Я посмотрел на класс org.hibernate.mapping.Column и увидел, что в нем есть методы "getQuotedName", которые я мог бы потенциально переопределить, если бы мог создать подкласс Column и сказать Hibernate использовать мой собственный класс Column.
Как лучше всего решить эту проблему, основываясь на предпочтительном подходе: а) отсутствие необходимости рефакторинга кодовой базы (b / c изменения имен свойств, методов получения и установки и т. Д.) И б) желание, чтобы приложение продолжало работать в HSQL и MySQL.
Было бы разумно иметь свойство в файле свойств, которое можно было бы переключать для включения / выключения некоторого исправления именования столбцов. Что напоминает мне, я пытался использовать собственную стратегию именования и переопределить метод columnName, чтобы заключить имя столбца в обратные метки ... это не работает, даже в MySQL.