+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 پاسخ 278 بازدید
0 امتیاز
1 پاسخ 354 بازدید
0 امتیاز
1 پاسخ 308 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 447 بازدید
0 امتیاز
1 پاسخ 411 بازدید
0 امتیاز
2 پاسخ 880 بازدید
0 امتیاز
1 پاسخ 500 بازدید
0 امتیاز
1 پاسخ 1.7هزار بازدید
سوال شده 6 سال قبل در برنامه نویسی توسط 1993 (242 امتیاز)
...