+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 پاسخ 273 بازدید
0 امتیاز
1 پاسخ 342 بازدید
0 امتیاز
1 پاسخ 301 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 442 بازدید
0 امتیاز
1 پاسخ 409 بازدید
0 امتیاز
2 پاسخ 872 بازدید
0 امتیاز
1 پاسخ 499 بازدید
0 امتیاز
1 پاسخ 1.6هزار بازدید
سوال شده 6 سال قبل در برنامه نویسی توسط 1993 (242 امتیاز)
...