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

با استفاده از کد زیر خروجی یک Native SQL query که توسط hibernate اجرا می شود را به راحتی به یک Hibernate Entity تبدیل می کنم :

query = session.createSQLQuery("select * from CUSTOMER").
    addEntity(Customer.class);

حالا سوال من این است که اگر من یک کلاس مدل (مانند CustomerModel) داشته باشم که Hibernate Entity نیست. چگونه می توانم خروجی اجرای این Native SQL query را به این کلاس که Hibernate Entity نیست bind کنم؟ کد زیر خطای org.hibernate.MappingException: Unknown entity می دهد:

query = session.createSQLQuery("select * from CUSTOMER").
    addEntity(CustomerModel.class);

1 پاسخ

+2 امتیاز
قبل توسط (1.1هزار امتیاز)
 
بهترین پاسخ

برای این کار شما باید یک ResultTransformer بنویسید:

public class CustomerModelResultTransformer implements ResultTransformer {

    @Override
    public Object transformTuple(Object[] rowData, String[] aliasNames) {
        CustomerModel customerModel = new CustomerModel();

        for (int i = 0; i < aliasNames.length; i++) {
            if (aliasNames[i].equals("NAME")) {
                customerModel.setName((String) rowData[i]);
            }
        }

        return customerModel;
    }

    @Override
    public List transformList(List list) {
        return list;
    }
}

و سپس با استفاده از متد setResultTransformer نوع کلاس خروجی را مشخص کنید (که می تواند کلاسی غیر از Hibernate Entity باشد):

        Query query = session.createSQLQuery("select * from CUSTOMER")
                .setResultTransformer(new CustomerModelResultTransformer());
       
        List<CustomerModel> result = query.list();
        
        for (CustomerModel customerModel : result) {
            System.out.println("customer name = "+customerModel.getName());
        }

سوالات مشابه

+1 امتیاز
1 پاسخ 366 بازدید
+1 امتیاز
1 پاسخ 421 بازدید
+1 امتیاز
1 پاسخ 409 بازدید
0 امتیاز
1 پاسخ 325 بازدید
+1 امتیاز
0 پاسخ 304 بازدید
+1 امتیاز
1 پاسخ 297 بازدید
+1 امتیاز
1 پاسخ 292 بازدید
...