Oracle डाटाबेस 11g के लिए हाइबरनेट बोली?


98

क्या Oracle डेटाबेस 11g के लिए एक हाइबरनेट बोली है? या मुझे org.hibernate.dialect.Oracle10gDialectहाइबरनेट वाले जहाजों का उपयोग करना चाहिए ?

जवाबों:


104

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


2
दुर्भाग्य से "ORA-01754: के लिए मदद नहीं करता है: एक तालिका में केवल प्रकार का एक कॉलम हो सकता है"।
— जन गोयवर्ट्स

मुझे विशिष्ट आरक्षित फ़ंक्शन INTERVAL के साथ समस्या है .. जैसे "@Formula (" SYSDATE - INTERVAL '1' HOUR * SHOW_LIMIT_HOURS ")"। मुझे नहीं पता कि यह कुछ समस्या उत्पन्न कर सकता है, लेकिन एक अच्छा समाधान प्रतीत होता है: stackoverflow.com/a/26907699/1488761
— Eduardo Fabricio

12

समर्थित डेटाबेस के अनुसार , ओरेकल 11 जी आधिकारिक तौर पर समर्थित नहीं है। हालाँकि, मेरा मानना ​​है कि आपको उपयोग करने में कोई समस्या नहीं होनी चाहिए org.hibernate.dialect.OracleDialect।


15
मन जो घटायाorg.hibernate.dialect.OracleDialect गया है ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… )। आपको Oracle 10g बोली का उपयोग करना चाहिए।
— योनातन

7
Oracle 11 अब समर्थित है
— MJB

8
जैसा कि @MJB ने बताया कि Oracle 11 समर्थित है। अनुपस्थित भाग है: यह org.hibernate.dialect.Oracle10gDialect क्लास लिंक (hiernate 4.x पर भी लागू होता है) के साथ समर्थित है
— bmichalik

4

हमें मोड 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;"

इसके बजाय निष्पादित किए जाने वाले सभी अनुक्रमों को लौटाता है।


2

कम से कम 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;

लेकिन अन्य बारीकियां हो सकती हैं।


0

यदि आप WL 10 का उपयोग कर रहे हैं, तो निम्न का उपयोग करें:

org.hibernate.dialect.Oracle10gDialect


-1

केवल org.hibernate.dialect.OracleDialect का उपयोग करें 10g, 9 आदि निकालें।


यह "डारियो" द्वारा भी सुझाया गया था, लेकिन @Yonatan द्वारा उनके उत्तर के लिए टिप्पणी पढ़ें।
— टॉम ब्रूनबर्ग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.