Hibernate: используйте обратные кавычки для MySQL, но не для HSQL

Проект, над которым я работаю (который использует Java, Spring, Hibernate), недавно изменился с Oracle на MySQL. Там - это несколько случаев, когда некоторые свойства в коде являются зарезервированными словами в MySQL, например, "release".

Есть несколько решений: 1) переименовать свойства в коде и последующих методах получения / установки, а также обновить код который вызывает эти методы 2) аннотируйте свойство в коде с помощью @Column (name = "` release` "). Это заставляет hibernate указывать имя при обращении к базе данных.

Я бы предпочел держаться подальше от первого подхода, чтобы уменьшить вероятность взлома большего количества вещей. Второй подход - «нормально», за исключением того, что он специфичен для MySQL. В нашем dev. setup мы используем HSQL, которому не нравятся обратные кавычки вокруг имен столбцов.

Я посмотрел на класс org.hibernate.mapping.Column и увидел, что у него есть методы getQuotedName, которые я потенциально мог бы переопределить, если бы мог создать подкласс Column и скажу Hibernate использовать мой собственный класс Column.

Какой лучший способ решить эту проблему на основе предпочтительного подхода: a) отсутствие необходимости реорганизации кодовой базы (b / c изменения имен свойств, методов получения / установки и т. Д.) И b) желание, чтобы приложение продолжало работать в HSQL и MySQL.

Было бы разумно иметь свойство в файле свойств, которое можно было бы переключать для включения / выключения исправления именования столбцов. Это напомнило мне, что я попытался использовать собственную стратегию именования и переопределить метод "columnName", чтобы заключить имя столбца в обратные кавычки ... это не работает даже в MySQL.

6
задан gutch 18 May 2012 в 04:47
поделиться