Будьте в спящем режиме аннотация табличной области Oracle

Я только использую методы считывания/методы set, когда нет никакой альтернативы. Когда я могу, я использовать этот шаблон (не в том смысле, что это - хорошая практика, а в том смысле, что я последовательно делаю это): Изменение свойства не влияет на поведение объекта, пока оно не действительно необходимо. Например:

myWnd->Title = "hello"; // not a setter, just a LPCSTR member
myWnd->Title = "world";
myWnd->ShowWindow();    // perhaps updates a WNDCLASS structure
                        // and other complicated things that
                        // the user of the class doesn't want to know

я знаю, что это означает, что я должен буду записать некоторые изобретенные закрытые методы обновить внутренние состояния объектов, но если то усилие необходимо для сокрытия сложности пользователю класса, я должен буду сделать его.

6
задан l15a 13 August 2009 в 20:34
поделиться

1 ответ

Нет, нет возможности сделать это прямо из коробки. Раньше я использовал следующий - довольно сложный - подход:

  1. Создайте собственную аннотацию, @TableSpec , которая имеет табличное пространство и другие необходимые атрибуты.
  2. Extend org .hibernate.cfg.Configuration и переопределите getTableMappings () , чтобы вернуть декорированные объекты Table (см. ниже).
  3. Extend org.hibernate.mapping.Table и переопределите sqlCreateString () и / или sqlAlterStrings () , чтобы добавить спецификацию табличного пространства (и дополнительные настройки, если таковые имеются).
  4. Вместо использования инструмента hbm2ddl (или задачи ant ) напишите свой собственный, который будет создавать ваш объект Configuration , обрабатывать все ваши файлы классов, собирая и интерпретируя аннотации @TableSpec , и вызывать Configuration.generateSchemaCreationScript () или generateSchemaUpdateScript () для генерации фактического DDL.

As Я сказал, довольно сложно :-) В качестве альтернативы, если ВСЕ ваши сопоставленные таблицы используют одно и то же табличное пространство, вы можете расширить диалект Oracle, который вы используете, и переопределить getTableTypeString () , чтобы вернуть спецификацию табличного пространства. Хотя это уродливый прием (поскольку исходная цель tableTypeString - предоставить тип движка MySQL), он работает и, безусловно, намного быстрее и проще, чем описанный выше подход.

generateSchemaCreationScript () или generateSchemaUpdateScript () для генерации фактического DDL.

Как я уже сказал, довольно сложно :-) В качестве альтернативы, если ВСЕ ваши сопоставленные таблицы используют одно и то же табличное пространство, вы можете расширить Диалект Oracle, который вы используете, и переопределите getTableTypeString () , чтобы вернуть спецификацию табличного пространства. Хотя это уродливый прием (поскольку исходная цель tableTypeString - предоставить тип движка MySQL), он работает и, безусловно, намного быстрее и проще, чем описанный выше подход.

генерировать Диалект Oracle, который вы используете, и переопределите getTableTypeString () , чтобы вернуть спецификацию табличного пространства. Хотя это уродливый прием (поскольку исходная цель tableTypeString - предоставить тип движка MySQL), он работает и, безусловно, намного быстрее и проще, чем описанный выше подход.

7
ответ дан 17 December 2019 в 00:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: