+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 پاسخ 188 بازدید
0 امتیاز
1 پاسخ 258 بازدید
0 امتیاز
1 پاسخ 202 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 360 بازدید
0 امتیاز
1 پاسخ 309 بازدید
0 امتیاز
2 پاسخ 567 بازدید
0 امتیاز
1 پاسخ 401 بازدید
0 امتیاز
1 پاسخ 1.5هزار بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط 1993 (242 امتیاز)
...