3

I am trying to map a returned result of JPA native query to a un-mapped Java POJO class and using @ConstructorResult as below:

@SqlResultSetMapping(name = "productDetailResult", classes = {
   @ConstructorResult(targetClass = com.rjil.mhood.jiostore.bo.ProductDetailBO.class,
   columns = {
@ColumnResult(name = "iconId", type = Integer.class),
@ColumnResult(name = "thumbnailId", type = Integer.class),
@ColumnResult(name = "screenshotId1", type = Integer.class),
@ColumnResult(name = "screenshotId2", type = Integer.class),
@ColumnResult(name = "screenshotId3", type = Integer.class),
@ColumnResult(name = "screenshotId4", type = Integer.class),
@ColumnResult(name = "screenshotId5", type = Integer.class),
@ColumnResult(name = "name", type = String.class),
@ColumnResult(name = "description", type = String.class),
@ColumnResult(name = "downloadcount", type = BigDecimal.class),
@ColumnResult(name = "artifactSize", type = String.class),
@ColumnResult(name = "creationDate", type = Date.class),
@ColumnResult(name = "updatedDate", type = Date.class),
@ColumnResult(name = "price", type = BigDecimal.class),
@ColumnResult(name = "downloadUrl", type = String.class),
@ColumnResult(name = "contentProviderName", type = String.class) }) })

and the POJO class is :

public class ProductDetailBO {

    private Integer iconId;
    private Integer thumbnailId;
    private Integer screenshotId1;
    private Integer screenshotId2;
    private Integer screenshotId3;
    private Integer screenshotId4;
    private Integer screenshotId5;
    private String name;
    private String description;
    private BigDecimal downloadCount;
    private String artifactSize;
    private Date creationDate;
    private Date updatedDate;
    private BigDecimal price;
    private String downloadUrl;
    private String contentProviderName;

    public ProductDetailBO() {

    }

    public ProductDetailBO(Integer iconId, Integer thumbnailId,
            Integer screenshotId1, Integer screenshotId2,
            Integer screenshotId3, Integer screenshotId4,
            Integer screenshotId5, String name, String description,
            BigDecimal downloadCount, String artifactSize, Date creationDate,
            Date updatedDate, BigDecimal price, String downloadUrl,
            String contentProviderName) {
        this.iconId = iconId;
        this.thumbnailId = thumbnailId;
        this.screenshotId1 = screenshotId1;
        this.screenshotId2 = screenshotId2;
        this.screenshotId3 = screenshotId3;
        this.screenshotId4 = screenshotId4;
        this.screenshotId5 = screenshotId5;
        this.name = name;
        this.price = price;
        this.creationDate = creationDate;
        this.updatedDate = updatedDate;
        this.description = description;
        this.downloadCount = downloadCount;
        this.artifactSize = artifactSize;
        this.downloadUrl = downloadUrl;
        this.contentProviderName = contentProviderName;

    }


}

The POJO class contains a matching constructor but the query.getResultList() returns an Object array.

I want a ProductDetailBO like so:

ProductDetailBO bo = query.getResultList("query","ProductDetailBO").get(0);

How can I do that?

Spooky
  • 2,966
  • 8
  • 27
  • 41

1 Answers1

1

I just performed similar mapping to an un-manapped pojo in my project. The thing is that you should point to the name of your SqlResultSetMapping while creating a query, so in your case it should be something like this:

final Query query = entityManager.createNativeQuery(queryString, "productDetailResult");

and then something like:

final List<ProductDetailBO> result = Collections.checkedList(query.getResultList(), ProductDetailBO.class);
devrogs
  • 533
  • 3
  • 13