2012-07-30 11 views
11

से एसक्यूएल स्ट्रिंग प्राप्त करें मुझे एक हाइबरनेट क्वेरी से स्ट्रिंग प्राप्त करने और बाद में संसाधित करने की आवश्यकता है (इसलिए मैं इसे "hibernate.show_sql" के साथ हल नहीं कर सकता)।हाइबरनेट क्वेरी

मैंने पहले से ही How to get SQL from Hibernate Criteria API (*not* for logging) पर देखा है लेकिन उस वर्कअराउंड के साथ मुझे SQL क्वेरी स्ट्रिंग मिलती है लेकिन पैरामीटर मान दिखाने के बजाय यह '?' दिखाता है ... क्या पैरामीटर मानों के साथ पूर्ण SQL स्ट्रिंग प्राप्त करने का कोई तरीका है?

मुझे लगता है कि समाधान मैं "SELECT * FROM USER WHERE NAME=? AND SURNAME=?" पाने के साथ मतलब है, लेकिन मैं "SELECT * FROM USER WHERE NAME='John' AND SURNAME='Doe'" प्राप्त करने की आवश्यकता ...

विचार?

+0

क्या आपने कोई जवाब देखा है? – jelies

उत्तर

1

p6spy नामक एक उपकरण है। यह थोड़ा बड़ा है और मुझे डर है कि यह अब और नहीं बनाए रखा है। यह मुझे अतीत में अच्छे परिणाम देता है, वैसे भी।

संपादित करें: अभी पाया गया है कि यह सक्रिय रूप से फिर से विकसित किया जा रहा है। मेरे लिए एक आकर्षण की तरह काम करता है!

1

"पैरामीटर मानों के साथ पूर्ण SQL स्ट्रिंग" जैसी कोई चीज़ नहीं है।

हाइबरनेट तैयार कथन का उपयोग करता है, इसलिए यह क्वेरी स्ट्रिंग को ? एस और पैरामीटर मान अलग से डेटाबेस में भेजता है, ताकि वास्तविक क्वेरी कभी नहीं बनाई जा सके।

शायद आप QueryImpl से पैरामीटर मान निकालने का कोई तरीका ढूंढ सकते हैं, लेकिन इस मामले में भी आप निष्पादन के लिए एक क्वेरी तैयार नहीं कर पाएंगे, क्योंकि आपको एस्केपिंग, पैरामीटर मानों का रूपांतरण एसक्यूएल में संभालना होगा शाब्दिक, आदि

+0

धन्यवाद, मुझे डर था कि कोई समाधान नहीं था ... – diminuta

8

आप इस हाइबरनेट पैकेज के लिए प्रवेश की TRACE स्तर सेट करने के लिए और पैरामीटर बाध्यकारी आपके आवेदन लॉग में दिखाना चाहिए:

<category name="org.hibernate.type"> 
     <priority value="TRACE"/> 
</category> 

आउटपुट उदाहरण:

13:58:51,505 DEBUG [SQL] 
insert 
     into 
      s.audit 
      (action, e_s, ip, time, userid, id) 
     values 
      (?, ?, ?, ?, ?, ?) 
13:58:51,505 TRACE [StringType] binding 'Modify user' to parameter: 1 
13:58:51,505 TRACE [StringType] binding 'E' to parameter: 2 
13:58:51,505 TRACE [StringType] binding '164.20.81.65' to parameter: 3 
13:58:51,505 TRACE [TimestampType] binding '2012-07-30 13:58:51' to parameter: 4 
13:58:51,505 TRACE [IntegerType] binding '158' to parameter: 5 
13:58:51,505 TRACE [IntegerType] binding '8851' to parameter: 6 

और 'hibernate.show_sql=true' संपत्ति को न भूलें जिसे आपने पहले संबंधित एसक्यूएल दिखाने के लिए कहा था।

+0

यह ठीक है, लेकिन मुझे "पूरी" क्वेरी की आवश्यकता है, जैसे: s.audit (action, e_s, ip, time, userid, id) मानों में डालें ('उपयोगकर्ता को संशोधित करें', 'ई', '164.20.81.65', '2012-07-30 13:58:51', '158', '8851') ... – diminuta

+0

"पूरी" क्वेरी जैसा आपने कहा संभव नहीं है , यह सबसे नज़दीकी समाधान है जो मुझे लगता है :( – jelies

+0

वैसे भी आपको बहुत धन्यवाद: / – diminuta

0

जेडीबीसी लॉगर यह फ़ॉर्म आपको करता है। http://jdbclogger.sourceforge.net/। Mysql, postgres, और वसंत एकीकरण का समर्थन करता है।

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