+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 پاسخ 351 بازدید
+1 امتیاز
1 پاسخ 397 بازدید
+1 امتیاز
1 پاسخ 385 بازدید
0 امتیاز
1 پاسخ 308 بازدید
+1 امتیاز
0 پاسخ 281 بازدید
+1 امتیاز
1 پاسخ 285 بازدید
+1 امتیاز
1 پاسخ 281 بازدید
...