JPA 2.0 از قابلیت نگاشت خروجی یک JPA native query به یک کلاس عیر Entity پشتیبانی نمی کند. اما در JPA 2.1 قابلیتی به نام SqlResultSetMapping اضافه شده است که این امکان را فراهم می سازد. در این مورد کلاس Dto یک Entity نیست و باید برای آن SqlResultSetMapping تعریف شود:
@SqlResultSetMapping(name="dto", classes = {
@ConstructorResult(targetClass = Dto.class,
columns = {@ColumnResult(name="ID" , type = Long.class)
, @ColumnResult(name="APP_NAME" , type = String.class)})
})
حالا با استفاده از کد زیر براحتی می توان نگاشت را انجام داد فقط باید کلاس Dto یک constructor به همین ترتیب نوع که در ConstructorResult گفته شده است داشته باشد :
Query query = em().createNativeQuery("SELECT id, appName FROM market.App;", "dto");