tôi sẽ đề nghị một cách tiếp cận chút khác nhau mà có thể đáp ứng nhu cầu của bạn.
Trong JPA 2.1, có một tính năng được gọi là "lập bản đồ kết quả".
Về cơ bản bạn phải xác định một lớp POJO mà sẽ giữ các giá trị kết quả (tất cả các giá trị phải được thông qua bằng cách sử dụng constructor):
public class ResultClass{
private String fieldOne;
private String fieldTwo;
public ResultClass(String fieldOne, String fieldTwo){
this.fieldOne = fieldOne;
this.fieldTwo = fieldTwo;
}
}
Sau đó, bạn phải khai báo ánh xạ vào một trong các đơn vị của bạn (không quan trọng mà trên đó, nó chỉ có thể là một @Entity declated):
@SqlResultSetMapping(name="ResultMapping", classes = {
@ConstructorResult(targetClass = ResultClass.class,
columns = {@ColumnResult(name="columnOne"), @ColumnResult(name="columnTwo")})
})
các columnOne
và columnTwo
là bí danh khi được công bố trong mệnh đề select của truy vấn nguồn gốc.
Và cuối cùng sử dụng trong việc tạo ra truy vấn:
List<ResultClass> results = em.createNativeQuery(query, "ResultMapping").getResultList();
Theo tôi đây là thanh lịch hơn và "mức trên" Giải pháp là bạn không phải làm việc với một chìa khóa Map generic/giá trị cặp nhưng với một bê tông Lớp POJO.
Nguồn
2017-06-16 08:19:56
Bài viết thực sự thực sự hữu ích - trước đây tôi đã cố sử dụng 'ResultTransformer' không có hiệu lực. Chính xác những gì tôi cần. –
Có thể bạn có thể trợ giúp với điều này: https://stackoverflow.com/questions/44585825/correct-cast-in-resulttransformer –
Sử dụng các đối tượng bọc không phải là nguyên thủy. Bạn sử dụng db nào? Oracle, mysql, postgressql ... có thể có vấn đề với một số loại – xyz