LINUX.ORG.RU

История изменений

Исправление ma1uta, (текущая версия) :

Обычно первое, что находят - это myBatis и Hibernate. Потом оказывается, что есть EclipseLink (который в качестве jpa тоже неплох).

На самом деле jpa (hibernate/eclipselink) генерируют вполне годный sql (конечно, про специфичные штуки каждой СУБД придётся забыть). Но для этого надо понимать, как он генерирует sql и уметь им пользоваться. И да, придётся мириться с тем, что в stacktrace-е будет 5-10 дополнительных вызовов jpa.

Но если уж связался с jpa и без него никак, тогда http://www.querydsl.com очень облегчает жизнь, и позволяет избежать встречи с Criteria API, заменяя запросы примерно на вот такой код:

cats = query.select(catEntity).from(cat)
    .innerJoin(mate).on(cat.mateId.eq(mate.id))
    .where(cat.dtype.eq("Cat"), mate.dtype.eq("Cat"))
    .fetch();

Если можно отказаться от jpa, тогда можно взять jdbi или jOOQ.

Исходная версия ma1uta, :

Обычно первое, что находят - это myBatis и Hibernate. Потом оказывается, что есть EclipseLink (который в качестве jpa тоже неплох).

На самом деле jpa (hibernate/eclipselink) генерируют вполне годный sql (конечно, про специфичные штуки каждой СУБД придётся забыть). Но для этого надо понимать, как он генерирует sql и уметь им пользоваться. И да, придётся мириться с тем, что в stacktrace-е будет 5-10 дополнительных вызовов jpa.

Но если уж связался с jpa и без него никак, тогда http://www.querydsl.com очень облегчает жизнь, и позволяет избежать встречи с Criteria API, заменяя примерно на вот такой код:

cats = query.select(catEntity).from(cat)
    .innerJoin(mate).on(cat.mateId.eq(mate.id))
    .where(cat.dtype.eq("Cat"), mate.dtype.eq("Cat"))
    .fetch();

Если можно отказаться от jpa, тогда можно взять jdbi или jOOQ.