Какие функции orm.xml следует избегать, чтобы не зависеть от базы данных? - PullRequest
0 голосов
/ 25 февраля 2010

Я отправляюсь в приключение в JPA и хочу, насколько это возможно, оставаться независимым от базы данных. Какие функции orm.xml следует избегать, чтобы не зависеть от базы данных?

Например, если я использую strategy="AUTO" в orm.xml следующим образом:

<id name="id">
    <generated-value strategy="AUTO" />
</id>

... тогда MySQL показывает его в виде столбца AUTO_INCREMENT, который может (я пока не уверен) вызвать проблемы, если мне нужно будет выполнить развертывание в Oracle.

Ответы [ 3 ]

1 голос
/ 25 февраля 2010

В общем случае MySQL «AUTO_INCREMENT» следует использовать при выборе генерации значения «IDENTITY», и в Sybase SERIAL, и в DB2 ... и т. Д. Некоторые СУБД не имеют чего-то эквивалентного.

Генерация значения "AUTO" предназначена для реализации, чтобы выбрать то, что лучше всего подходит для этого хранилища данных. Да, в MySQL они могут выбрать AUTO_INCREMENT, а в Sybase SERIAL, в Oracle SEQUENCE и т. Д. И т. Д., Но с точки зрения пользовательского кода, что можно (нужно) работать в любой спецификации, соответствующей спецификации. Очевидно, что вы не можете затем переключать реализации JPA и ожидать, что он будет использовать точно такой же механизм, поскольку JPA impl # 1 может выбрать AUTO_INCREMENT в MySQL, а JPA impl # 2 может выбрать некоторый внутренний механизм и т. Д. И т. Д.

1 голос
/ 25 февраля 2010

Особенности JPA

  • Вы можете использовать все функции JPA. В худшем случае вам потребуется изменить аннотации или orm.xml (например, если вы хотите использовать специальную последовательность в Oracle), но все функции поддерживаются так или иначе, не влияя на код . Вот что хорошо с ORM - у вас есть дополнительный уровень абстракции.

Зарезервированные ключевые слова

  • Не используйте зарезервированное слово для именования ваших таблиц и столбцов

Держитесь близко к стандарту SQL-92

Способ перевода запросов (особенно нативных) свободен. В некоторых случаях это замечательно, но иногда может привести к некоторым проблемам:

  • Не использовать AS в собственных запросах
  • Никогда не используйте SELECT * в собственных запросах
  • Пользователь = за равенство, а не ==
  • Использовать только стандартные функции SQL-92
1 голос
/ 25 февраля 2010

Я не знаком с JPA, но в целом разумный ORM должен быть независимым от базы данных (для основных баз данных) для всех его отображений.

Особенно стратегия приращения "АВТО" должна работать "из коробки".

При переключении базы данных вам приходится сталкиваться с проблемами миграции существующих данных.

...