2008-09-12 1 views
2

Мне кажется, что введение ORM-инструмента должно сделать вашу архитектуру более чистым, но для эффективности я обнаружил, что обошел ее и повторил по набору результатов JDBC. Это приводит к несогласованному запуску артефактов вместо более чистой архитектуры.Когда вы/вы должны идти целой свиньи с помощью подхода ORM?

Это потому, что я применяю инструмент в недопустимом Контексте, или он глубже этого?

Когда вы можете пойти с целым бором с помощью подхода ORM?

Любое понимание будет принята с благодарностью.


Немного фона:

В моей среде у меня есть около 50 клиентских компьютеров и 1 достаточно мощный SQL Server.

У меня есть настольное приложение, в котором все 50 клиентов обращаются к данным в любое время.

проект Модель данных прошла ряд реорганизаций по различным причинам, включая прозрачность, эффективность и т.д.

Мою историю модели данных в

  1. JDBC вызовы непосредственно
  2. DAO + POJO без отношений между Pojos (в основном обертывание JDBC).
  3. Добавленные Отношения между POJOs исполнителями отложенной загрузки, но только Скрытие между DAO вызывает
  4. Прыгнул на подножку гибернации после просмотра, как «простой» он сделал доступ к данным (это сделано интер POJO отношения тривиальна) и потому, что это может привести к снижению количество обратных рейсов в базу данных при работе со многими связанными объектами.
  5. С тех пор, как это было приложение для настольных приложений. Сессия открыта на долгое время, это был кошмар, и это привело к множеству проблем.
  6. Отступил на частичный подход DAO/Hibernate, который позволяет мне делать прямые вызовы JDBC за DAO занавес в то же время, используя Hibernate.

ответ

4

Hibernate имеет больше смысла, когда ваше приложение работает на графов объектов, которые сохраняются в РСУБД. Вместо этого, если ваша прикладная логика работает на двумерной матрице данных, выборка через прямой JDBC работает лучше. Хотя Hibernate написан поверх JDBC, он обладает возможностями, которые могут быть нетривиальны для реализации в JDBC. Например:

  1. Скажем, пользователь просматривает строку в пользовательском интерфейсе и изменяет некоторые значения, и вы хотите запустить запрос обновления только для тех столбцов, которые действительно изменились.
  2. Чтобы избежать попадания в тупиковые ситуации, вам необходимо поддерживать глобальный порядок SQL в транзакции. Получение этого права JDBC может быть нелегким
  3. Легко настраивать оптимистичную блокировку. Когда вы используете JDBC, вам нужно помнить об этом в каждом запросе обновления.
  4. Пакетные обновления, ленивая материализация коллекций и т. Д. Также могут быть нетривиальными для реализации в JDBC.

(я говорю « может нетривиальным», потому что это, конечно, может быть сделано - и вы могли бы быть супер-хакер :)

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

Надеюсь, это поможет вам решить.

PS: Сохранение сеанса открытым на удаленном настольном клиенте и проблема с работой на самом деле не проблема Hibernate - вы столкнулись бы с той же проблемой, если долго держите соединение с БД открытым.

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