Hibernate NamingStrategy реализация, которая поддерживает состояние между вызовами - PullRequest
1 голос
/ 12 марта 2010

Я работаю над проектом, в котором мы используем 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.

1 Ответ

2 голосов
/ 13 марта 2010

Звучит как очень плохая идея. Подрыв такого интерфейса без сохранения состояния почти наверняка закончится слезами, потому что, как вы говорите, нет никакой гарантии, что Hibernate будет называть вещи в правильном порядке.

Однако я удивлен этим соглашением об именах, особенно если учесть, что в Oracle имеется жестко установленный предел в 30 символов для идентификаторов. Может быть достаточно сложно найти подходящие имена, не беспокоясь о том, чтобы имя таблицы начиналось с префикса имени каждого столбца. Это определенно не соглашение об именах Oracle, с которым я когда-либо сталкивался, просто расточительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...