Spring Данные JPA и QueryDSL

Я новичок в Spring data JPA и пытаюсь понять, как лучше всего использовать его с QueryDSL. Без QueryDSL я мог бы просто создавать любые запросы в моем интерфейсе SpringData с аннотацией @Query.

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

В первом случае я теряю возможность использовать любой из автоматически созданных методов SD (например: findAll(QueryDSL predicate)) в моем пользовательском репо, поскольку у меня нет доступа к фактическому объекту репо, а во втором случае я размещение логики запроса на уровне службы, а не на уровне репо.

Ни одно из решений не кажется мне особенно привлекательным. Есть ли более подходящий 3-й способ? Или я неправильно понимаю, как правильно использовать QueryDSL и Spring Data?

Спасибо!

Эрик


person Eric B.    schedule 20.11.2012    source источник


Ответы (1)


Вероятно, самый удобный способ — позволить интерфейсам вашего репозитория просто расширить QueryDslPredicateExecutor, что добавляет возможность просто передавать объекты Querydsl Predicate в репозиторий и выполнять их отдельно или вместе с Pageable и Sort и т.п.

Если вы действительно хотите скрыть комбинацию предикатов на уровне репозитория (что совершенно нормально, но на самом деле служит другой цели), вы создаете отдельный класс реализации репозитория, как описано здесь и используйте QueryDslRepositorySupport в качестве базового класса. В ваших реализованных методах поиска вы можете просто использовать методы from(…), update(…) и delete(…) базового класса, чтобы легко создавать и выполнять запросы с использованием метамодели Querydsl.

person Oliver Drotbohm    schedule 22.11.2012
comment
Дело не в hiding the combination of predicates into the repository, для меня речь идет о добавлении group by и ... к моим запросам и их выполнении, которые только предикаты, кажется, не подходят к этому - person azerafati; 25.10.2014
comment
К сожалению, QueryDslPredicateExecutor не позволяет использовать groupBy и т. д. Только where часть запроса. Часто этого недостаточно. Но реализация пользовательского репозитория с QueryDslRepositorySupport в качестве базового класса действительно хороша! - person Ruslan Stelmachenko; 30.08.2016
comment
@azerafati, взгляните на github.com/infobip/infobip-spring-data -jpa-querydsl, возможно, это то, что вы ищете. - person lpandzic; 10.10.2017