2011-03-24 12 views
21

मैं एचक्यूएल का उपयोग करके एक खोज क्वेरी पर काम कर रहा हूं और जब तक मैं LIKE क्लॉज तक नहीं पहुंच जाता तब तक सबकुछ काम करता है। इससे कोई फर्क नहीं पड़ता कि मैं ऐसा करता हूं, ऐसा लगता है कि यह ठीक तरह से खंड को निष्पादित नहीं करता है। मेरी क्वेरी यहाँ है।समस्या वाले LIQL के साथ HQL क्वेरी

String QUERY = "FROM Person as p WHERE p.createUser = : createUser 
    AND p.personId in (SELECT pn.personId FROM PersonName pn WHERE pn.personNameType = 'FIRST' AND pn.name LIKE '%:firstName%')"; 

(List<Person>)session.createQuery(QUERY).setString("createUser", createUser).setString("firstName", firstName).list(); 

उत्तर

46

स्ट्रिंग अक्षर के अंदर पैरामीटर हल नहीं किए गए हैं।

आप स्ट्रिंग संयोजन के साथ पैरामीटर मान को % रों जोड़ने की जरूरत है - या तो कार्यक्रम पक्ष

String QUERY = "FROM Person as p WHERE p.createUser = : createUser 
    AND p.personId in " + 
    "(SELECT pn.personId FROM PersonName pn " + 
    "WHERE pn.personNameType = 'FIRST' " + 
    "AND pn.name LIKE :firstName)"; 

(List<Person>)session.createQuery(QUERY) 
    .setString("createUser", createUser) 
    .setString("firstName", "%" + firstName + "%").list(); 

पर या डेटाबेस पक्ष में:

String QUERY = "FROM Person as p WHERE p.createUser = : createUser 
    AND p.personId in " + 
    "(SELECT pn.personId FROM PersonName pn " + 
    "WHERE pn.personNameType = 'FIRST' " + 
    "AND pn.name LIKE CONCAT('%', :firstName, '%'))"; 

(List<Person>)session.createQuery(QUERY) 
    .setString("createUser", createUser) 
    .setString("firstName", firstName).list(); 
+0

क्या मामले के बारे में संवेदनशीलता। क्या यह मामला असंवेदनशील बनाने का कोई तरीका है? उत्तर के लिए धन्यवाद! @axtavt – medium

+1

आपकी क्वेरी में कम केस के लिए 'pn.name' और पैरामीटर' firstName 'कास्ट करें – djmj

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