Я работаю над проектом, в котором мы используем Hibernate и JBoss 5.1. Нам нужно, чтобы наши классы сущностей были сопоставлены с таблицами Oracle, которые следуют определенному соглашению об именах. Я хотел бы избежать указания каждой таблицы и имени столбца в аннотациях. Поэтому в настоящее время я рассматриваю возможность реализации пользовательской реализации org.hibernate.cfg.NamingStrategy
.
Соглашения об именах SQL требуют, чтобы имена столбцов имели суффикс, эквивалентный префиксу имени таблицы. Если существует таблица «T100_RESOURCE», столбец идентификатора должен иметь имя «RES_ID_T100».
Чтобы реализовать это в NamingStrategy
, реализация должна будет поддерживать состояние, то есть текущее имя класса, для которого создаются сопоставления. Это будет полагаться на Hibernate
- всегда звонить
classToTableName()
до propertyToColumnName()
- и для определения всех имен столбцов путем вызова
propertyToColumnName()
до следующего вызова classToTableName()
Безопасно ли это делать или есть ситуации, когда Hibernate все перепутает? Я имею в виду не проблемы из-за нескольких потоков (которые могут быть решены путем сохранения последнего имени класса в ThreadLocal
), но также и из-за преднамеренного вызова Hibernate в определенных обстоятельствах. Например, Hibernate запрашивает сопоставления трех свойств класса A, затем одного из класса B, а затем еще нескольких атрибутов класса A.