Я создал две сущности в JPA, Listing и ItemType - они существуют в отношении многие-ко-многим (Hibernate автоматически создает таблицу соединений).Я пытаюсь найти лучший способ создать запрос, который принимает динамический список строк типа элемента и возвращает идентификаторы всех списков, которые соответствуют указанным типам элементов, но я недавно инициировал в JPA.
В настоящее время я использую JpaRepository для создания относительно простых запросов.Я пытался сделать это с помощью CriteriaQuery, но некоторые близкие, но не совсем ответы, которые я читал в другом месте, по-видимому, предполагают, что, поскольку это весной, это может быть не самый лучший подход, и что я должен справиться с этим, используясама реализация JpaRepository.Это кажется разумным?
У меня есть запрос, который не чувствует себя в миллионах миль (на основе примера Baeldung и моего прочтения на WikiBooks ), но для началаЯ получаю предупреждение о необработанном типе при присоединении, не говоря уже о том, что я не уверен, что это произойдет, и я уверен, что есть лучший способ сделать это.
public List<ListingDTO> getListingsByItemType(List<String> itemTypes) {
List<ListingDTO> listings = new ArrayList<>();
CriteriaQuery<Listing> criteriaQuery = criteriaBuilder.createQuery(Listing.class);
Root<Listing> listing = criteriaQuery.from(Listing.class);
//Here Be Warnings. This should be Join<?,?> but what goes in the diamond?
Join itemtype = listing.join("itemtype", JoinType.LEFT);
In<String> inClause = criteriaBuilder.in(itemtype.get("name"));
for (String itemType : itemTypes) {
inClause.value(itemType);
}
criteriaQuery.select(listing).where(inClause);
TypedQuery<Listing> query = entityManager.createQuery(criteriaQuery);
List<Listing> results = query.getResultList();
for (Listing result : results) {
listings.add(convertListingToDto(result));
}
return listings;
}
Япытаясь понять, как лучше всего передать динамический список name
s (поле в ItemType) и вернуть список уникальных id
s (PK в листинге), где есть строка, которая соответствует в таблице соединений.Пожалуйста, дайте мне знать, если я смогу предоставить какую-либо дополнительную информацию или помощь - у меня возникло ощущение, что JPA и его обработка динамических запросов, подобных этому, являются частью его хлеба с маслом!