+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 پاسخ 178 بازدید
0 امتیاز
1 پاسخ 252 بازدید
0 امتیاز
1 پاسخ 196 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 352 بازدید
0 امتیاز
1 پاسخ 301 بازدید
0 امتیاز
2 پاسخ 543 بازدید
0 امتیاز
1 پاسخ 395 بازدید
0 امتیاز
1 پاسخ 1.5هزار بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط 1993 (242 امتیاز)
...