+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 پاسخ 362 بازدید
+1 امتیاز
1 پاسخ 416 بازدید
+1 امتیاز
1 پاسخ 402 بازدید
0 امتیاز
1 پاسخ 323 بازدید
+1 امتیاز
0 پاسخ 300 بازدید
+1 امتیاز
1 پاسخ 295 بازدید
+1 امتیاز
1 پاسخ 288 بازدید
...