क्या Oracle डेटाबेस 11g के लिए एक हाइबरनेट बोली है? या मुझे org.hibernate.dialect.Oracle10gDialect
हाइबरनेट वाले जहाजों का उपयोग करना चाहिए ?
क्या Oracle डेटाबेस 11g के लिए एक हाइबरनेट बोली है? या मुझे org.hibernate.dialect.Oracle10gDialect
हाइबरनेट वाले जहाजों का उपयोग करना चाहिए ?
जवाबों:
Oracle 10g बोली का उपयोग करें। हाल ही में JDBC ड्राइवरों के लिए हाइबरनेट 3.3.2+ आवश्यक है (आंतरिक वर्ग संरचना बदल गई - लक्षण एक अमूर्त वर्ग के बारे में रोना होगा)।
Oracle 11g की बोली Oracle 10g ( org.hibernate.dialect.Oracle10gDialect ) के समान है। स्रोत: http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/session-configuration.html#configuration-optional-dialects
समर्थित डेटाबेस के अनुसार , ओरेकल 11 जी आधिकारिक तौर पर समर्थित नहीं है। हालाँकि, मेरा मानना है कि आपको उपयोग करने में कोई समस्या नहीं होनी चाहिए org.hibernate.dialect.OracleDialect
।
org.hibernate.dialect.OracleDialect
गया है ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… )। आपको Oracle 10g बोली का उपयोग करना चाहिए।
हमें मोड org.hibernate.dialect.Oracledialect
का उपयोग करके (पदावनत) बोली और Oracle 11g डेटाबेस के साथ एक समस्या थी hibernate.hbm2ddl.auto = validate
।
इस बोली के साथ हाइबरनेट अनुक्रमों को खोजने में असमर्थ था (क्योंकि getQuerySequencesString()
विधि का कार्यान्वयन , जो इस क्वेरी को लौटाता है:
"select sequence_name from user_sequences;"
जिसके लिए निष्पादन डेटाबेस से एक खाली परिणाम देता है)।
बोली का उपयोग org.hibernate.dialect.Oracle9iDialect
, या अधिक से अधिक, समस्या को हल करता है, getQuerySequencesString()
विधि के एक अलग कार्यान्वयन के कारण :
"select sequence_name from all_sequences union select synonym_name from all_synonyms us, all_sequences asq where asq.sequence_name = us.table_name and asq.sequence_owner = us.table_owner;"
इसके बजाय निष्पादित किए जाने वाले सभी अनुक्रमों को लौटाता है।
कम से कम EclipseLink 10g और 11g के मामले में भिन्न होता है। 11g के बाद से यह पेजेशन प्रश्नों के लिए first_rows संकेत का उपयोग करने के लिए अनुशंसित नहीं है।
देखें "क्या प्रति विशेष क्वेरी के लिए jpa संकेत अक्षम करना संभव है" । इस तरह की क्वेरी का उपयोग 11 जी में नहीं किया जाना चाहिए।
SELECT * FROM (
SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum FROM (
SELECT * FROM TABLES INCLUDING JOINS, ORDERING, etc.) a
WHERE ROWNUM <= 10 )
WHERE rnum > 0;
लेकिन अन्य बारीकियां हो सकती हैं।
केवल org.hibernate.dialect.OracleDialect का उपयोग करें 10g, 9 आदि निकालें।