आपके डेटाबेस के आधार पर, यह मामूली सरल हो सकता है। एचक्यूएल अंतर्निहित विक्रेता-विशिष्ट विशेषताओं और कार्यों का समर्थन करता है, यह नए कार्यों को पंजीकृत करके बोली को विस्तारित करने की क्षमता का भी समर्थन करता है यदि वे पहले ही एचक्यूएल द्वारा समर्थित नहीं हैं।
मान लें कि आप SQLServer (या Sybase) का उपयोग कर रहे हैं। SQLServer में 'DATEADD' नामक एक फ़ंक्शन है जो आपको बहुत आसानी से पसंद कर सकता है। प्रारूप है:
DATEADD (datepart, number, date)
आप पहली बार अपने दम हाइबरनेट बोली में समारोह पंजीकरण से HQL में सीधे इस सुविधा का उपयोग कर सकते हैं। ऐसा करने के लिए, आपको केवल उस बोलीभाषा को विस्तारित करना होगा जिसका आप वर्तमान में उपयोग कर रहे हैं। यह एक बहुत ही सरल प्रक्रिया है।
सबसे पहले, अपने स्वयं के बोली वर्ग (अपनी खुद की डीबी विक्रेता के साथ 'SQLServer2008Dialect' की जगह ले) बनाने के लिए:
public class MySQLServerDialect extends SQLServer2008Dialect {
public MySQLServerDialect() {
registerFunction("addminutes", new VarArgsSQLFunction(TimestampType.INSTANCE, "dateadd(minute,", ",", ")"));
}
}
इसके बाद, इस नए वर्ग का उपयोग करने के अपने हाइबरनेट विन्यास को संशोधित: अब
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
...
<property name="hibernate.dialect">com.mycompany.MySQLServerDialect</property>
...
</hibernate-configuration>
बस फ़ंक्शन का उपयोग करें:
select x from MyEntity x where addminutes(x.creationDate, 10) < current_time()
(यह मानता है कि आपकी इकाई को MyEntity कहा जाता है और creat_date फ़ील्ड को सृजनडेट नामक किसी संपत्ति पर मैप किया गया है)।
डेटाबेस क्या है? –