Spring Data с интерфейсной проекцией с помощью Subquery - PullRequest
0 голосов
/ 14 октября 2019

Я работаю над проектом с использованием данных весны jpa и базы данных Oracle. у меня проблема с пружиной данных jpa в проекции интерфейса. когда я пытаюсь выполнить запрос в HQL-консоли, он возвращает правильный результат, но когда я использую его в запросе, он возвращает следующую строку:

[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=?
            )
        )

1 Ответ

0 голосов
/ 15 октября 2019

спасибо за ответы. я написал метод .toString () и ошибся. возник конфликт с возвращаемым типом проекции интерфейса.

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

    //DTO
            public interface OCMUserNameDTO {

                String getCodUseridPstme();

            }

спасибо!

...