尽管具有正确的 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
我已经解决了关于这个主题的其他类似问题,发现我的设置是正确的(至少证实了其他人过去的建议)。
我确实有一个专门用于此查询的 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