我已經解決了關于這個主題的其他類似問題,發現我的設定是正確的(至少證實了其他人過去的建議)。我確實有一個專用的 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);
上述查詢中使用的所有物體欄位都是字串(即使是上述物體中的日期欄位也是字串)。
我不確定可能出了什么問題。
uj5u.com熱心網友回復:
使用 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/358245.html
