Bạn không thể chọn một tập hợp trong phép chiếu DTO như thế này:
SELECT new com.tim.core.dto.client.MinimalContactDTO(c.id, c.version, c.name, c.title, c.email, c.createdDate, **c.phones**)
ResultSet giống như một bảng tính, không giống như một biểu đồ của các đối tượng.
Việc bạn cần làm là thay đổi DTO của mình như sau:
public MinimalContactDTO(
Long id, Long version, String name, String title, String email,
Date createdDate, ContactPhone phone) {
...
}
Giờ đây, bạn chỉ có thể chuyển một điện thoại tại một thời điểm:
SELECT new com.tim.core.dto.client.MinimalContactDTO(
c.id, c.version, c.name, c.title, c.email, c.createdDate, p)
from CONTACT c
JOIN c.phones p
where
(
c.localRecordStatus IS NULL OR
c.localRecordStatus IN (:openStatusList) )
)
Sau đó, bạn có thể chuyển đổi ResutSet giống bảng thành một biểu đồ bằng cách sử dụng Hibernate ResultTransformer
.