Reputation: 416
This my repostoriy for retrieve items
@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);
and this my interface which i need to map the result to it
@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;
}}
and the result of this query not mapped to the interface , what is the problem for it ?
Upvotes: 3
Views: 2826
Reputation: 825
You need an interface if you want to retrieve those values. And be careful with the naming of the methods. If you have like in your case AS name
then call the method getName()
. But if you don't have AS specified and you are returning a value for example like PRODUCT_UNIT_OF_MEASURE
then use the following method name: getProduct_Unit_Of_Measure()
.
For getting those two values use the following interface:
public interface ItemModelProjection {
String getId();
String getName();
}
Upvotes: 1
Reputation: 3945
You can solve this issue and achieve the result by using projections by making your DTO an interface with getters for columns returned by the query.
All you need to do is to have interface and contain query domains starting with get
.
public interface ItemModelProjection {
Long getId();
String getName();
}
Upvotes: 1