微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

本机查询的 Spring 数据投影未映射到接口

如何解决本机查询的 Spring 数据投影未映射到接口

这是我用于检索项目的存储库

@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;
    }}

而且这个查询的结果没有映射到接口,这是什么问题?

解决方法

您可以通过使用投影来解决这个问题并获得结果,方法是让您的 DTO 成为一个带有用于查询返回的列的 getter 的接口。

您需要做的就是拥有接口并包含以 get 开头的查询域。

public interface ItemModelProjection {
    Long getId();
    String getName();
}
,

如果您想检索这些值,您需要一个接口。并注意方法的命名。如果您的情况喜欢 AS name,则调用方法 getName()。但是,如果您没有指定 AS 并且您正在返回一个值,例如 PRODUCT_UNIT_OF_MEASURE,则使用以下方法名称:getProduct_Unit_Of_Measure()

要获取这两个值,请使用以下接口:

public interface ItemModelProjection {

  String getId();

  String getName();

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。