О Java ORM

Материал из YourcmcWiki
Перейти к: навигация, поиск

JPA: Hibernate, EclipseLink

Плюсы:

  • Умеет дохрена всего :)
  • Например, есть Hibernate Envers, из коробки умеющий логгировать историю изменений сущностей в отдельные таблицы

Минусы:

  • Несколько монструозны

ActiveJPA

Реализация Active Record поверх JPA.

ActiveJDBC

Плюсы:

  • Active Record для Java
  • Легковесный:
    • Необязательны геттеры/сеттеры, поля можно читать по именам model.get("поле")
    • Нет ни проксей, ни сессий, ни persistence manager’ов, ни DAO, ни репозиториев, ни «attach/detach», ни собственного языка запросов

Минусы:

  • Неотключаемое автоматическое определение таблиц и типов полей во время выполнения. Также есть автоматическая привязка классов к таблицам по правилам английского языка — извращение, но по крайней мере отключаемое.
  • Отсутствие поддержки нескольких схем (#144).
  • Трудно во время выполнения явно указать соединение БД, с которым должна работать конкретная модель — несколько соединений указывается только на уровне аннотаций во время компиляции, а в рантайме всегда используется текущее «привязанное» к имени соединение.
  • Отсутствие доступа к «старым» («чистым») значениям полей при сохранении модели.
  • Отсутствие поддержки композитных первичных ключей — всегда нужна автоинкрементная колонка «id», даже в таблицах отношений «многие ко многим»

Ebean ORM

Плюсы:

  • Также довольно близок к Active Record. Проксей, сессий, persistence manager'ов, DAO, репозиториев и attach/detach тоже нет.
  • Использование JPA-аннотаций для разметки классов (автор считает, что эта часть спецификации JPA очень разумна и скорее всего )
  • Модель хранит старые ("чистые") значения полей до сохранения
  • Наличие встроенных хуков для добавления аудита или логгирования истории
  • Есть Fluent API для запросов
  • Есть поддержка массовой ленивой загрузки связей

Минусы:

  • Пока не найдено :))