Как получить результат от JPA Custom @Query в Spring при загрузке в DTO - PullRequest
0 голосов
/ 04 марта 2020

Я хочу получить результат этого запроса в DTO без использования Tuple.

@ Репозиторий publi c Интерфейс CustomMapRepository расширяет JpaRepository {

@Query(
    nativeQuery = true,
    value = "select  i.id as  permissionId, p.id as projectId,p.name as projectName,i.user_id as userId,\n" +
        "case " +
        "when  i.scopes is not null then i.scopes\n" +
        "when i.scopes is null   then \"[{'edit':false},{'create':false},{'update':flase},{'delete':false},{'view':false}]\" end as scopes \n" +
        "from   internal_permission i  \n" +
        "right join project p\n" +
        "on i.project_id=p.id\n" +
        "where \n" +
        "(user_id=:userId or user_id is null )and \n" +
        "p.space_id=:spaceId )")
List<CustomMapDTO> findBySpaceIdAndUserId(@Param("spaceId") Long spaceId, @Param("userId") String userId);

}


the DTO Class 

publi c Класс CustomMapDTO реализует Сериализуемый {

private  String permissionId;
private  Long projectId;
private  String projectName;
private  String userId;
private  String  scopes;

// .. геттеры и сеттеры}



1 Ответ

0 голосов
/ 05 марта 2020
  List<CustomMapDTO> res= ((Session)this.em.getDelegate()).createSQLQuery(
        "\n select p.id as projectId,p.name as projectName, i.id as permissionId,i.user_id as userId,\n" +
            "case\n" +
            "  when  i.scopes is not null then i.scopes\n" +
            "  when i.scopes  is null   then \"[{'edit':false},{'create':false},{'update':flase},{'delete':false},{'view':false}]\" end as scopes \n" +
            "from internal_permission i right join project p \n" +
            "on i.project_id=p.id \n" +
        "where \n" +
        "((user_id=:userId or user_id is null ) " +
        " and \n" +
        "(p.space_id=:spaceId))")
        .addScalar("projectId", LongType.INSTANCE)
        .addScalar("projectName", StringType.INSTANCE)
        .addScalar("permissionId", LongType.INSTANCE)
        .addScalar("userId", StringType.INSTANCE)
        .addScalar("scopes", StringType.INSTANCE)
        .setResultTransformer(new AliasToBeanResultTransformer( CustomMapDTO.class))
        .setParameter("spaceId",spaceId)
        .setParameter("userId",userId)
        .unwrap(org.hibernate.query.Query.class)
        .getResultList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...