尽管具有正确的 DTO,但无法使用请求的结果类型为具有多个 return 的查询创建 TypedQuery

Cannot create TypedQuery for query with more than one return using requested result type, despite having correct DTO

我已经解决了关于这个主题的其他类似问题,发现我的设置是正确的(至少证实了其他人过去的建议)。

我确实有一个专门用于此查询的 AllRecordsDTO,它确实具有成功映射查询结果所需的所有字段。

AllRecordsDTO.java :

@NoArgsConstructor
@AllArgsConstructor
@ToString
public class AllRecordsDTO {

    @Getter
    @Setter
    private String recordName;

    @Getter
    @Setter
    private String recordTypeName;

    @Getter
    @Setter
    private String statusName;

    @Getter
    @Setter
    private String createdByUserId;

    @Getter
    @Setter
    private String createdDateTime;

    @Getter
    @Setter
    private String lastChangedByUserId;

    @Getter
    @Setter
    private String lastChangedDateTime;

}   

allRecordsQuery查询

    select r.recordName,
       rt.recordTypeName,
       s.name,
       usi.userId,
       r.createdDateTime,
       usi1.userId,
       r.lastChangedDateTime
from Record r
         left join Section s on s.id = r.statusId
         left join UniqueSecurityIdentifier usi on usi.id = r.createdByUserId
         left join RecordType rt on rt.id = r.recordTypeId
         left join UniqueSecurityIdentifier usi1 on usi1.id = r.lastChangedByUserId

抛出异常的行:

Query<AllRecordsDTO> createdQuery = statelessSession.createQuery(allRecordsQuery, AllRecordssDTO.class);

上面查询中使用的Entity字段都是String(上面实体中连date字段也是String)

我不确定哪里出了问题。

JPA 无法实现您正在尝试的操作。

您必须使用构造函数表达式。

select NEW <packagename>.AllRecordsDTO(r.recordName,
       rt.recordTypeName,
       s.name,
       usi.userId,
       r.createdDateTime,
       usi1.userId,
       r.lastChangedDateTime)
from Record r
         left join Section s on s.id = r.statusId
         left join UniqueSecurityIdentifier usi on usi.id = r.createdByUserId
         left join RecordType rt on rt.id = r.recordTypeId
         left join UniqueSecurityIdentifier usi1 on usi1.id = r.lastChangedByUserId

另请查看 Hibernate 文档:https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#hql-select-clause