Грааль - условное отображение - PullRequest
1 голос
/ 23 февраля 2012

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

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

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


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

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

1 Ответ

1 голос
/ 23 февраля 2012

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

РЕДАКТИРОВАТЬ:

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

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

...

native :

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

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

static mapping = {
    id generator:'native'
}
...