Подводные камни и практические примеры использования: Toplink, Hibernate, Eclipse Link, Ibatis - PullRequest
3 голосов
/ 06 апреля 2009

Я много работал с Hibernate как моей реализацией JPA. В большинстве случаев работает нормально! Но я также видел много подводных камней:

  • Удаленное взаимодействие с постоянными объектами затруднено, поскольку Hibernate заменяет коллекции Java собственной реализацией коллекции. Поэтому каждый клиент должен иметь библиотеки Hibernate .jar. Вы должны позаботиться об исключениях LazyLoading и т. Д. Одним из способов решения этой проблемы является использование веб-служб.
  • Грязная проверка выполняется для базы данных без какой-либо блокировки.
  • «Задержка SQL», означает, что доступ к данным не соответствует ACID. (Потерянные данные ...)
  • Implict Updates >> Поэтому мы не знаем, был ли объект изменен или нет (фиксация вызывает обновления).

Есть ли похожие проблемы с Toplink, Eclipse Link и Ibatis? Когда я должен их использовать? Есть ли у них аналогичные показатели? Есть ли причины выбирать Eclipse Link / Toplink ... вместо Hibernate?

Ответы [ 4 ]

5 голосов
/ 09 апреля 2009

Я могу поделиться своим изрядным количеством ошибок Hibernate:

  • Критерии API не безопасны
  • Criteria API относительно плохо разработан (например, вы не можете получить текущие псевдонимы)
  • Если вы создаете псевдоним, вы вызываете внутреннее соединение (это в документации, но вводит в заблуждение)
  • Нет поддержки UNIONs
  • Нет простого способа ' распаковки ' постоянного объекта (удаленное взаимодействие поддерживается третьими лицами)
  • Нет поддержки таблиц без PK (теперь я тупой, но это происходит в устаревших схемах)
  • Нет простого способа использовать последовательности для столбцов не-PK (не так глупо)

Что касается большинства реализаций JPA, я всегда обнаруживал, что мне придется полагаться на некоторые пользовательские аннотации или около того, чтобы делать вещи, которые не включены в спецификацию JPA.

2 голосов
/ 13 апреля 2009

Есть ли причины выбрать Eclipse? Ссылка / Toplink ... поверх Hibernate?

В стране разработчиков O / R mapper (там, где я живу;)) общеизвестно, что Toplink считается наиболее полнофункциональным и лучшим O / R mapper. У него есть свои слабые стороны, но его огромное количество функций делает его непростым. Так как это теперь с открытым исходным кодом и бесплатно, я бы попробовал.

iBatis на самом деле не O / R-маппер, это скорее заполнитель классов / сохраняется через жестко запрограммированный SQL. Таким образом, вы должны сделать тяжелую работу и написать все запросы. iBatis полезен, когда вы используете базу данных с сохраненными процессами и должны использовать эти процессы для получения DML / set.

1 голос
/ 06 мая 2010

В отношении Ebean ORM http://www.avaje.org и ваших ловушек:

Remoting

Вы можете использовать режим «vanilla» для запроса, и тогда Ebean будет возвращать простые бобы и коллекции. Это работает только при использовании «динамических прокси / динамических подклассов», но не при использовании Enhancement (поскольку классы объектных компонентов явно улучшены).

Грязная проверка выполняется для Базы данных без какой-либо блокировки .

Я полагаю, вы имеете в виду оптимистическую проверку параллелизма? Если это так, то по определению это делается без явной блокировки БД. Вместо этого вам нужно использовать пессимистическую блокировку, если вы хотите / нуждаетесь в блокировке БД (выберите для обновления и т. Д.), Поэтому я не буду придерживаться вашей позиции.

Задержка SQL

Ebean не имеет сессий и поэтому не имеет сессионного сброса (). При использовании пакетной обработки JDBC SQL по-прежнему может быть отложено с помощью Ebean, но это не та задержка, которую вы получаете с помощью сессии flush ().

Неявные обновления

Обычная жалоба, которую мы слышим от бывших людей Hibernate и бывших JPA. Ebean спроектирован без сессии / entityManager. Вместо этого вам нужно явно сохранить () компонент или иметь этот каскад для связанных компонентов. Так что да, никаких неявных обновлений с Ebean.

1 голос
/ 06 апреля 2009

Не могу комментировать другие реализации, но для DataNucleus AccessPlatform ...

  1. Для удаленного взаимодействия может потребоваться наличие файла «jdo.jar», поскольку классы модели расширены байт-кодом. В качестве альтернативы, если используется «только для чтения» на удаленной стороне, тогда используйте не расширенные классы, и все работает без дополнительного jar.
  2. Грязная проверка выполняется с помощью улучшения байт-кода, поэтому нет необходимости переходить в хранилище данных, чтобы увидеть, не загрязнено ли поле (и вы можете контролировать блокировки, когда хотите перейти в хранилище данных). Очевидно, что это дает значительные преимущества в производительности по сравнению с реализациями на основе отражения.
  3. Я не знаю, возможны ли «потерянные обновления»; помогает использование оптимистической блокировки.
  4. Вы можете получать неявные обновления из-за «управляемых отношений» (где у вас двунаправленное отношение, и вы меняете только одну сторону, поэтому DataNucleus обновляет другую сторону, чтобы она была согласованной ... at flush ()). Вы можете отключить «управляемые отношения» (до определенного момента). Вы можете легко включить управление версиями объектов и узнать, изменен ли объект или нет.

Причины выбора DataNucleus задокументированы здесь

НТН

- Энди DataNucleus

...