+1 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)

وقتی می خواهم خروجی یک JPA native query را به یک کلاس POJO (غیر Entity) نگاشت کنم:

Query query = em().createNativeQuery("SELECT id, appName  FROM App;", Dto.class);

خطای زیر را دریافت می کنم:

Missing descriptor for [class jpatest.Dto]

1 پاسخ

0 امتیاز
قبل توسط (1.1هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

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");

سوالات مشابه

0 امتیاز
1 پاسخ 284 بازدید
0 امتیاز
1 پاسخ 365 بازدید
0 امتیاز
1 پاسخ 313 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 451 بازدید
0 امتیاز
1 پاسخ 418 بازدید
0 امتیاز
2 پاسخ 895 بازدید
0 امتیاز
1 پاسخ 505 بازدید
0 امتیاز
1 پاسخ 1.7هزار بازدید
سوال شده 6 سال قبل در برنامه نویسی توسط 1993 (242 امتیاز)
...