Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

हाइबरनेट Oracle इंटरवल एक्सप्रेशन और Oracle 11g बोली

2 दिनों की पीड़ा के बाद, हाइबरनेट स्रोत कोड के एएसटी प्रसंस्करण का विश्लेषण करते हुए मैंने आखिरकार हार मान ली !! =P .. वास्तव में अभी तक Oracle 11g बोली उपलब्ध नहीं है।

इसलिए, मैंने रणनीति बदल दी और इसे निम्नलिखित परिवर्तनों के साथ हल किया:

<मजबूत>1. Oracle डेटाबेस पर फॉलो फंक्शन बनाएं

CREATE OR REPLACE FUNCTION INTERVAL_HOURS_AGO(HOURS_PARAM IN NUMBER) 
   RETURN DATE DETERMINISTIC
   IS TIME_AGO DATE;
   BEGIN 
      SELECT (SYSDATE - INTERVAL '1' HOUR * HOURS_PARAM) INTO TIME_AGO FROM DUAL;
      RETURN(TIME_AGO); 
    END;

जहां-क्लॉज पर इसका उपयोग करते समय प्रदर्शन समस्या से बचने के लिए फ़ंक्शन पर नियतात्मक संकेत बहुत महत्वपूर्ण है। लिंक पर इसके बारे में अधिक जानकारी:http://www.inside-oracle-apex.com/caution-when-using-plsql-functions-in-sql-statement/

<मजबूत>2. एक कस्टम Oracle बोली वर्ग बनाएं और नया फ़ंक्शन पंजीकृत करें।

public class Oracle11gDialectExtended extends Oracle10gDialect {

    public Oracle11gDialectExtended() {

        super();

       registerFunction("interval_hours_ago", 
           new StandardSQLFunction("INTERVAL_HOURS_AGO", StandardBasicTypes.DATE));

    }
}

तो, बस इसे @Formula पर कॉल करें:

@Formula(" INTERVAL_HOURS_AGO( SHOW_LIMIT_HOURS ) ")
private Date showLimitDate;

या HQL / NamedQuery पर:

select p from Product p 
  where p.createdAt > interval_hours_ago(60)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DBCP कनेक्शन पूल लॉगिनटाइमआउट

  2. पर्ल स्क्रिप्ट में इनपुट पैरामीटर और आउट कर्सर के साथ एक संग्रहीत प्रक्रिया को लागू करना

  3. Oracle में एक स्ट्रिंग से दिनांक कैसे प्राप्त करें?

  4. ओरेकल के प्लस (+) नोटेशन और एएनएसआई जॉइन नोटेशन के बीच अंतर?

  5. क्या मैं ऑरैकल में ट्रिगर के अंदर ट्रिगर अक्षम कर सकता हूं?