2011-11-15 13 views
14

मैं एक एसक्यूएल क्वेरी में कोई CamelCase बलों:ResultTransformer इकाई क्षेत्रों

List<Employee> employees = getCurrentSession() 
        .createSQLQuery(
          "select" 
            + e.id as id,e.first_name as firstName,e.password as password 
            + "from employee e,employee_role er,role r where e.employee_id=er.employee_id and er.role_id=r.role_id and r.name='ROLE_ADMIN' ") 
        .setResultTransformer(Transformers.aliasToBean(Employee.class)) 
        .list(); 

मैं कर्मचारी firstName कहा जाता है में एक संपत्ति है, लेकिन जब एक इकाई परीक्षण में दाव ऊपर भागने की कोशिश कर, मैं निम्नलिखित अपवाद प्राप्त कर रहा हूं:

org.hibernate.PropertyNotFoundException: Could not find setter for firstname on class com.app.domain.Employee 

मुझे नहीं पता कि इस प्रथम नाम संपत्ति से हाइबरनेट कहां से मिलता है? मैंने अपनी क्वेरी में यह सही नहीं किया?

किसी भी तरह से वैकल्पिक हल FirstName के लिए संपत्ति, और ही टिककर खेल बदलने के लिए था, setters भी लेकिन किसी भी विचार क्यों हाइबरनेट इस तरह के व्यवहार कर रहा है, और यह कैसे से बचने के लिए, के बाद से मैं अपने डोमेन CamelCase का उपयोग करना चाहते, कृपया सलाह ।

उत्तर

21

आप स्पष्ट रूप से अपने देशी एसक्यूएल के स्तंभ उर्फ ​​घोषित करने के लिए addScalar(String columnAlias, Type type) उपयोग कर सकते हैं:

getCurrentSession() 
    .createSQLQuery("select e.id as id,e.first_name as firstName,e.password as password from xxxxxx") 
       .addScalar("id",StandardBasicTypes.INTEGER) 
       .addScalar("firstName",StandardBasicTypes.STRING) 
       .addScalar("password",StandardBasicTypes.STRING) 
       .setResultTransformer(Transformers.aliasToBean(Employee.class)) 
       .list(); 
+0

addScalar + क्वेरी में भी चुनें? –

+0

मुझे ऐसा लगता है, क्योंकि 'asScalar() 'का उपयोग करके' चयन करें 'के बिना मुझे त्रुटियां मिलेंगी। –

0

यह कैसे (और अगर) से संबंधित हो सकती आपने कॉन्फ़िगर अपने NamingStrategy

http://matthew.mceachen.us/blog/hibernate-naming-strategies-20.html

या

अगर आप मौसम या नहीं सक्रिय कर दिया है केस संवेदी मेज MySQL का उपयोग कर रहे/स्तंभ नाम http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

+0

मैं postgresql का उपयोग कर रहा हूं। –

12

एक सरल समाधान के लिए, सर्वर पर भेजे गए क्वेरी में पहचानकर्ता को डबल-कोट करें।

e.first_name as firstName 

के बजाय यह

e.first_name as "firstName" 

PostgreSQL में, डबल-के हवाले से एक पहचानकर्ता बलों मामले संवेदनशीलता को पढ़ना चाहिए। अनजान, यह (ज्यादातर) एसक्यूएल मानक का पालन करता है और एक ही मामले में folds (हालांकि कम मामला जहां मानक ऊपरी मामला है)।

संबंधित मुद्दे