代码之家  ›  专栏  ›  技术社区  ›  SME

Spring JPA Query getResultList作为应用程序/json返回数据

  •  0
  • SME  · 技术社区  · 6 年前

    我有一个使用Spring JPA的web应用程序,我有以下在集成测试中运行良好的功能

    public List<PermissionQueryDTO> findByCompanyAndEventType(int companyId, int eventTypeId) {
        Query query = getEntityManager().createNativeQuery(FIND_BY_COMPANY_AND_EVENT_TYPE_QUERY, "PermissionQueryMapping");
        query.setParameter("companyId", companyId);
        query.setParameter("eventTypeId", eventTypeId);
        return query.getResultList();
    }
    

    在我的Web应用中运行时,我会收到以下错误消息:

    Could not locate appropriate constructor on class : a.b.c.PermissionQueryDTO] as "application/json" using [org.springframework.http.converter.StringHttpMessageConverter@346a9eea]
    

    有人知道我为什么会犯这个错误吗

    1 回复  |  直到 6 年前
        1
  •  0
  •   SME    6 年前

    问题是结果集映射没有指定类型。我必须改变这一点:

    @SqlResultSetMapping(
        name="PermissionQueryMapping",
        classes={
            @ConstructorResult(
                targetClass=PermissionQueryDTO.class,
                columns={
                    @ColumnResult(name="prop_id"),
                    @ColumnResult(name="prop_description"s),
                    @ColumnResult(name="prop_code"),
                    @ColumnResult(name="prop_pt_id"),
                    @ColumnResult(name="permissionId"),
                    @ColumnResult(name="uplineStationPermissionLevel"),
                    @ColumnResult(name="previousStationPermissionLevel"),
                    @ColumnResult(name="eventStationPermissionLevel"),
                    @ColumnResult(name="nextStationPermissionLevel",
                    @ColumnResult(name="downlineStationPermissionLevel"),
                }
            )
        } 
    )
    

    对此:

    @SqlResultSetMapping(
        name="PermissionQueryMapping",
        classes={
            @ConstructorResult(
                targetClass=PermissionQueryDTO.class,
                columns={
                    @ColumnResult(name="prop_id", type=Integer.class),
                    @ColumnResult(name="prop_description", type=String.class),
                    @ColumnResult(name="prop_code", type=String.class),
                    @ColumnResult(name="prop_pt_id", type=Integer.class),
                    @ColumnResult(name="permissionId", type=Integer.class),
                    @ColumnResult(name="uplineStationPermissionLevel", type=Integer.class),
                    @ColumnResult(name="previousStationPermissionLevel", type=Integer.class),
                    @ColumnResult(name="eventStationPermissionLevel", type=Integer.class),
                    @ColumnResult(name="nextStationPermissionLevel", type=Integer.class),
                    @ColumnResult(name="downlineStationPermissionLevel", type=Integer.class),
                }
            )
        } 
    )