#spring #spring-boot #spring-data-jpa #spring-projections
#весна #весенняя загрузка #spring-data-jpa #весенние проекции
Вопрос:
Это мой репост для извлечения элементов
@Query(value = "SELECT DISTINCT M.ID as "id", "
" M.NAME_PRIMARY_LANG as "name" "
" FROM ECOMMERCE_CORE.MERCHANT_ITEMS M , "
" ECOMMERCE_CORE.PRODUCT_UNIT_OF_MEASURE P , "
" ECOMMERCE_CORE.LOOKUP_TYPES_STATUS S , "
" ECOMMERCE_CORE.ITEM_TYPES T , "
" ECOMMERCE_CORE.ITEM_PRICE I,"
" ECOMMERCE_CORE.MERCHANT_ITEM_BRAND B, "
" ECOMMERCE_CORE.MERCHANT_ITEM_CATEGORY C "
" WHERE M.ID = P.PRODUCT_ID AND M.ID=I.PRODUCT_ID AND M.ID = B.MERCHANT_ITEM_ID AND S.ID=M.STATUS_ID AND M.TYPE = T.ID AND M.MERCHANT_ID =?1 AND M.STATUS_ID =?2 "
" AND P.BRANCH_ID = ?3 AND I.CHANNEL_ID = ?4 ",
nativeQuery = true
)
List<ItemModelProjection> findBySupplierIdAndStatusCode(long id, long status, long branchId, long channelId, Pageable pageable);
и это мой интерфейс, который мне нужен, чтобы сопоставить с ним результат
@Getter
@EqualsAndHashCode(of = {"id"})
public class ItemModelProjection {
private String id;
private String name;
public ItemModelProjection(final String id, final String name) {
this.id = id;
this.name = name;
}}
и результат этого запроса не сопоставлен с интерфейсом, в чем проблема для него?
Ответ №1:
Вы можете решить эту проблему и добиться результата с помощью проекций, сделав свой DTO интерфейсом с геттерами для столбцов, возвращаемых запросом.
Все, что вам нужно сделать, это иметь интерфейс и содержать домены запросов, начинающиеся с get
.
public interface ItemModelProjection {
Long getId();
String getName();
}
Ответ №2:
Вам нужен интерфейс, если вы хотите получить эти значения. И будьте осторожны с именованием методов. Если у вас есть, как в вашем случае AS name
, тогда вызовите метод getName()
. Но если у вас не указано, и вы возвращаете значение, например, как PRODUCT_UNIT_OF_MEASURE
, тогда используйте следующее имя метода : getProduct_Unit_Of_Measure()
.
Для получения этих двух значений используйте следующий интерфейс:
public interface ItemModelProjection {
String getId();
String getName();
}