+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 پاسخ 518 بازدید
+1 امتیاز
1 پاسخ 623 بازدید
+1 امتیاز
1 پاسخ 610 بازدید
0 امتیاز
1 پاسخ 457 بازدید
+1 امتیاز
0 پاسخ 443 بازدید
+1 امتیاز
1 پاسخ 419 بازدید
+1 امتیاز
1 پاسخ 424 بازدید
...