【问题标题】:Spring Data with interface projection with Subquery带有子查询的接口投影的 Spring Data
【发布时间】:2019-10-14 13:19:33
【问题描述】:

我正在使用 spring data jpa 和 Oracle 数据库进行项目。 我在界面投影中遇到了 spring data jpa 的问题。 当我在 HQL-Console 中尝试查询时,它返回正确的结果,但是当我在请求中使用它时,它返回此行:

[org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap@2f163567]

 //Repository
        @Query(value = "select m.codUseridPstme as codUseridPstme from OCMCharts o" +
                    " join o.ocmUnitsByChartsId u join u.ocmPostsByUnitsId p " +
                    "join p.ocmPostmemsByPostsId m where lower(trim(o.codCodeChrt)) =lower(trim(:chartCode))" +
                    " and p.flgIsmanagerPost=true " +
                    "and p.staPoststatePost='ACTIVE' and m.staMemberstatusPstme='ACTIVE' " +
                    "and u.codUnitcodeUnts in (select u.codUnitcodeUnts  from OCMCharts o " +
                    "join o.ocmUnitsByChartsId u "+
                    "join u.ocmPostsByUnitsId p " +
                    "join p.ocmPostmemsByPostsId m " +
                    "where lower(trim(o.codCodeChrt)) =lower(trim(:chartCode)) and u.staStatusUnts='ACTIVE' and m.codUseridPstme=:userName)")
            List<OCMUserNameDTO> getUnitManagerListByChartCodeAndUnitCodesIn(@Param("chartCode") String chartCode, @Param("userName") String userName);


        //DTO
        public interface OCMUserNameDTO {

            String getCodUseridPstme();

        }

//Console Query 

 select
        ocmpostmem3_.COD_USERID_PSTME as col_0_0_ 
    from
        OCM.OCM_CHARTS ocmcharts0_ 
    inner join
        OCM.OCM_UNITS ocmunitsby1_ 
            on ocmcharts0_.CHARTS_ID=ocmunitsby1_.CHRT_CHARTS_ID 
    inner join
        OCM.OCM_POSTS ocmpostsby2_ 
            on ocmunitsby1_.UNITS_ID=ocmpostsby2_.UNTS_UNITS_ID 
    inner join
        OCM.OCM_POSTMEM ocmpostmem3_ 
            on ocmpostsby2_.POSTS_ID=ocmpostmem3_.POST_POSTS_ID 
    where
        lower(trim(ocmcharts0_.COD_CODE_CHRT))=lower(trim(?)) 
        and ocmpostsby2_.FLG_ISMANAGER_POST=1 
        and ocmpostsby2_.STA_POSTSTATE_POST='ACTIVE' 
        and ocmpostmem3_.STA_MEMBERSTATUS_PSTME='ACTIVE' 
        and (
            ocmunitsby1_.COD_UNITCODE_UNTS in (
                select
                    ocmunitsby5_.COD_UNITCODE_UNTS 
                from
                    OCM.OCM_CHARTS ocmcharts4_ 
                inner join
                    OCM.OCM_UNITS ocmunitsby5_ 
                        on ocmcharts4_.CHARTS_ID=ocmunitsby5_.CHRT_CHARTS_ID 
                inner join
                    OCM.OCM_POSTS ocmpostsby6_ 
                        on ocmunitsby5_.UNITS_ID=ocmpostsby6_.UNTS_UNITS_ID 
                inner join
                    OCM.OCM_POSTMEM ocmpostmem7_ 
                        on ocmpostsby6_.POSTS_ID=ocmpostmem7_.POST_POSTS_ID 
                where
                    lower(trim(ocmcharts4_.COD_CODE_CHRT))=lower(trim(?)) 
                    and ocmunitsby5_.STA_STATUS_UNTS='ACTIVE' 
                    and ocmpostmem7_.COD_USERID_PSTME=?
            )
        )

【问题讨论】:

  • 你能发布整个堆栈跟踪吗?
  • 它返回 200 响应,并在 post man 中显示此响应 [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap@2f163567]
  • 您应该在控制台中看到堆栈跟踪
  • 无堆栈跟踪,但显示查询
  • 所以请回答您的问题或删除问题

标签: oracle spring-data-jpa dto


【解决方案1】:

感谢您的回答。 我写了一个 .toString() 方法,错了。它与接口投影的返回类型冲突。

List<OCMUserNameDTO> users = ocmPostmemService.getManagerUsernameOfPersonByChartCodeAndUserName(chartCode, userName);
                return new ResponseEntity<>(users.toString(), HttpStatus.OK);

    //DTO
            public interface OCMUserNameDTO {

                String getCodUseridPstme();

            }

谢谢!

【讨论】:

    猜你喜欢
    • 2022-12-02
    • 2020-07-26
    • 2019-02-26
    • 2016-08-10
    • 2018-10-23
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2021-01-01
    相关资源
    最近更新 更多