+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 پاسخ 484 بازدید
+1 امتیاز
1 پاسخ 568 بازدید
+1 امتیاز
1 پاسخ 551 بازدید
0 امتیاز
1 پاسخ 419 بازدید
+1 امتیاز
0 پاسخ 413 بازدید
+1 امتیاز
1 پاسخ 384 بازدید
+1 امتیاز
1 پاسخ 389 بازدید
...