Прежде всего некоторый контекст: у меня есть 2 сущности: CommodityData ( commodityId , код, defaultDescription) и CommodityDescription ( commodityId , lang , описание).Поле defaultDescription в первой таблице использует английский, а локализованное описание - во второй таблице.
Используя чистый JPA, я получаю то, что мне нужно, но я хотел бы знать, возможно ли реализовать это с помощью репозитория SpringDataJpa и спецификаций ( избегая JPQL ).
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<CommodityLang> query = cb.createQuery(CommodityLang.class);
Root<CommodityData> commodity = query.from(CommodityData.class);
Join<CommodityData, CommodityDescription> join = commodity.join("descriptions", JoinType.LEFT);
join.on(cb.equal(join.get("lang"), lang));
query.select(
cb.construct(CommodityLang.class,
commodity.get("categoryId"),
commodity.get("code"),
commodity.get("parent"),
commodity.get("path"),
commodity.get("defaultDescription"),
commodity.get("legacyLink"),
commodity.get("documentId"),
commodity.get("type"),
commodity.get("status"),
join.get("description"),
join.get("lang")
));
TypedQuery<CommodityLang> typedQuery = em.createQuery(query);
List<CommodityLang> results = typedQuery.getResultList();
Использование Spring Data Repository было бы интересно, потому что это позволило бы избежать обработки разбивки на страницы и сортировки, но чтение исходного кода SimpleJpaRepository, я думаю, невозможно.Это правильно?
Спасибо, Габриэле
PS: Левое объединение использует условие для , чтобы выполнить какой-либо фильтр для записей.