Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将本机查询的结果集转换为DTO列表_Java_Postgresql_Hibernate_Jpa_Dto - Fatal编程技术网

Java 如何将本机查询的结果集转换为DTO列表

Java 如何将本机查询的结果集转换为DTO列表,java,postgresql,hibernate,jpa,dto,Java,Postgresql,Hibernate,Jpa,Dto,我有以下DTO: @Data @NoArgsConstructor @AllArgsConstructor public class EmployeeHierarchyDto { private Integer id; private Integer supervisorId; private Integer level; private String branch; private Integer position; } 然后我有了这个本机查询:

我有以下DTO:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class EmployeeHierarchyDto {
    private Integer id;
    private Integer supervisorId;
    private Integer level;
    private String branch;
    private Integer position;
}
然后我有了这个本机查询:

    public List<EmployeeDto> getAllSubordinateSubordinates(Integer employeeId) {
        if (employeeId == null) {
            employeeId = getCeo().getId();
        }
        EntityManager em = getEntityManager();
        String sqlString = "select t.id, " +
                "t.supervisor_id, " +
                "t.level, " +
                "t.branch, " +
                "t.pos " +
                "FROM connectby('public.employee'::text, 'id'::text, 'supervisor_id'::text, 'last_name'::text, " + "'" + employeeId +
                "'::text, 0, '~'::text) t(id int, supervisor_id int, level integer, branch text, pos integer);";
        Query q = em.createNativeQuery(sqlString);
        List hierarchyList = q.getResultList();
        List<EmployeeDto> employeeDtoList = new ArrayList<>();

        return employeeDtoList;
    }
上述查询在db控制台中执行100%正确

编辑: 确切的错误是:

11:39:50,711 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-3) SQL Error: 0, SQLState: 42601
11:39:50,714 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-3) ERROR: syntax error at or near ":"
  Position: 88
42601指向PostgreSQL语法错误,但是,如果从调试器复制将成为本机查询的字符串并粘贴到db控制台中,则该字符串可以正常工作


为什么会这样?其次,我如何将结果集映射到EmployeeHierarchyDto的列表,它似乎与postgres的cast操作符使用的语法有关。 这是因为::type cast运算符与JPA:named参数语法冲突


有很多解决方法,请参见

我遇到了一个奇怪的错误
。我们应该猜猜吗?@NikolaiShevchenko对不起,朋友,不用猜了。我更新了问题。谢谢,用\\:\\:避开::符号非常有效!
11:39:50,711 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-3) SQL Error: 0, SQLState: 42601
11:39:50,714 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-3) ERROR: syntax error at or near ":"
  Position: 88