Изменения

О Java ORM

1247 байтов добавлено, 12:18, 18 февраля 2016
м
Нет описания правки
Плюсы:
* Умеют дохрена всего :)Наиболее «каноничный» Java ORM* В Есть дополнительные фичи — например, в Hibernate есть Envers, из коробки умеющий логгировать историю изменений сущностей в отдельные таблицы* Для получения красивого Fluent API запросов вместо HQL/JPQL-литералов можно подключить [http://www.querydsl.com/ Querydsl]
Минусы:
* Немного монструозны Код не лаконичен. Нужно задавать маппинги, классы сущностей, конструировать запросы либо через строковой HQL/JPQL, либо через многословный Criteria…* Трудно использовать для динамических сущностей (перегружены функционаломобъектов произвольной структуры) — так или иначе нужно конфигурировать маппинг, даже если используется динамическое отображение без классов моделей.
* Возможно, не вполне идеальна логика отображения — конструирование объекта всегда связано с десериализацией, для сохранения ID связанных объектов без самих объектов применяются proxy-классы и ленивая подгрузка (нет возможности одно и то же поле, скажем, person_id, видеть и в виде ID, и в виде объекта)…
* HQL/JPQL — всё-таки недоразумение. Не могу понять смысл реализации собственного строкового языка запросов — SQL если уж во что-то заворачивать, то во что-то объектно-структурированное — хотя бы в объект типа «запрос» с полями tables, where, order by, group by и т. п., но не снова в строковой же литерал!* Объекты запросов Кроме того, к нему есть в виде Criteria, но они не очень удобны, ибо многословныразличные [https://virgo47.wordpress.com/2014/10/09/jpa-is-it-worth-it-horror-stories-with-eclipselink-and-hibernate/ претензии].
== [https://github.com/ActiveJpa/activejpa ActiveJPA] ==
Реализация Попытка реализации Active Record поверх JPA. Минусы:* Велосипедик. == [http://www.querydsl.com/ Querydsl] == * Для получения красивого Fluent API запросов вместо HQL/JPQL-литералов можно подключить == [http://www.jooq.org/ jOOQ] == Минусы:* Для работы с Oracle нужна платная лицензия — не очень критично, так как для открытых СУБД (MySQL, PostgreSQL и так далее) доступна версия под лицензией Apache 2.0, разрешающей коммерческое использование.
== [http://javalite.io/activejdbc ActiveJDBC] ==
== [http://ebean-orm.github.io/ Ebean ORM] ==
По большей части похож на JPA, те же яйца, только в профиль. Классы размечаются ровно теми же JPA-аннотациями… EbeanServer — тот же аналог сессии или persistence manager’а… других частей JPA, правда, нет.
Плюсы:
* Серьёзные минусы вроде отсутствуют, разве что логика отображения та же, что в JPA
== Идея — Идея (велосипедик) — PHP-like ORM == Возможно, описанная суть примерно соответствует использованию Querydsl без JPA.
* Объект «соединение». Умеет делать запросы в синтаксически кратком стиле (возможно, Fluent API) и возвращать записи в виде чего-то типа Map<String,Object>. Кроме того, является аналогом сессии/persistence manager’а для моделей.