2012-02-23 3 views
1

В настоящее время я разрабатываю webapp, который использует Oracle как базу данных. Мне уже сообщили, что мой webapp должен работать и на Sybase ASE. Моя база данных Oracle использует последовательности для генерации идентификаторов, и я сопоставил свои классы домена, чтобы использовать эти последовательности. Насколько я знаю, Sybase ASE не имеет последовательностей, а тождеств. И вот моя проблема. Что делать с кодом/конфигурацией для работы с Oracle и Sybase. Некоторое «условное отображение» идентификатора для каждого домена будет иметь место.Grails - условное отображение

Я просто не хочу комментировать/раскомментировать строки в сопоставлениях каждый раз, когда я строю webapp для другой базы данных, чем уже сопоставлен. Есть ли у кого-нибудь идеи, что делать?

Существует еще одна опасность: существуют другие различия между Oracle и Sybase, которые влияют на отображение (я не создаю структуру базы данных, используя dbCreate = "create"). На данный момент я ничего не вижу. Любые впечатления?


EDIT: Оказалось, что это не представляется возможным сделать одно отображение для обеих баз данных. В моей структуре Oracle используются кавычки в именах столбцов и таблиц. И цитаты не разрешены в Sybase ASE. Мое (не приятное и красивое) решение меняет (комментировать/раскомментировать) отображение при создании webapp на определенной платформе.

Btw Я большой поклонник Grails, и эта картинная вещь кажется недостатком. Если бы я использовал «чистый» Hibernate, у меня было бы два сопоставления в xml-файлах, и я бы изменил их в зависимости от базовой базы данных. Но Grails не дает мне возможности иметь два отображения.

ответ

1

Я не знаю, позволяют ли grails вам настроить сопоставление кодирования для генерации id, но я думаю, что, возможно, вам не нужны ни последовательности, ни тождества, а используйте другую стратегию генератора идентификаторов hibernate: http://grails.org/doc/1.3.7/ref/Database%20Mapping/id.html.

EDIT:

Просмотр документации спящего режима я обнаружил, что это возможные последовательности использования или тождества в соответствии с возможностями базы данных, из http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html#mapping-declaration-id:

Всех генераторы реализуют интерфейс org.hibernate.id. IdentifierGenerator. Это очень простой интерфейс. Некоторые приложения могут выбирать для своих собственных специализированных реализаций , однако Hibernate предоставляет ряд встроенных решений . Имена ярлыков для встроенных генераторов являются следующим образом:

...

родного:

выбирает идентификатор, последовательность или хило в зависимости от возможностей основной базы данных.

Таким образом, вы, возможно, потребуется конфигурация, как это:

static mapping = { 
    id generator:'native' 
} 
+0

Это звучит красиво! Когда я закончу установку Sybase, я попробую. – emstol

+0

К сожалению, я не могу проверить, сработало ли это. Я считаю, что это ... мои имена идентификаторов Oracle цитируются (например, «SomeTableID»).Sybse ASE не разрешает кавычки в именах столбцов/таблиц. И вот чего я боялся. У меня не может быть одного сопоставления для обеих баз данных. – emstol

Смежные вопросы