2008-09-16 13 views
10

क्या हाइबरनेट में विश्लेषणात्मक कार्यों जैसे SQL सर्वर का उपयोग करने का कोई तरीका है?क्या हाइबरनेट में विश्लेषणात्मक कार्यों का उपयोग करना संभव है?

कुछ

तरह
select foo from Foo foo where f.x = max(f.x) over (partition by f.y) 
+0

पेडेंट्री: * विश्लेषणात्मक – GEOCHET

उत्तर

6

आप एक देशी SQL क्वेरी के बाद कर रहे हैं।

आप जेपीए उपयोग कर रहे हैं वाक्य रचना है:

Query q = em.createNativeQuery("select foo.* from Foo foo " + 
           "where f.x = max(f.x) over " + 
           "(partition by f.y)", Foo.class); 

आप कई प्रकार के वापस जाने के लिए, SQLResultSetMapping एनोटेशन पर एक नज़र डालें की जरूरत है।

आप हाइबरनेट एपीआई का उपयोग कर रहे हैं तो सीधे:

Query q = session.createSQLQuery("select {foo.*} from Foo foo " + 
           "where f.x = max(f.x) over "+ 
           "(partition by f.y)"); 
q.addEntity("foo", Foo.class); 

10.4.4. Queries in native SQL देखें अधिक जानकारी के लिए हाइबरनेट दस्तावेज में।

दोनों एपीआई में आप सेट पैरामीटर का उपयोग कर पैरामीटर में सामान्य रूप से पास कर सकते हैं।

+2

धन्यवाद, लेकिन क्या यह ऐसा कुछ है जो सीधे हाइबरनेट में करना संभव है? – ncgz

4

मैपिंग का उपयोग करने का एक और तरीका होगा। कृपया यह लेख देखें: https://forums.hibernate.org/viewtopic.php?f=1&t=998482

मैं हाइबरनेट में देशी एसक्यूएल प्रश्नों के उपयोग के खिलाफ हूँ ... आप एक मानचित्रण :-)

2

हाँ आप कर सकते हैं होने के लाभ खो, लेकिन आप का विस्तार करने की आवश्यकता होगी निम्न की तरह हाइबरनेट बोलीभाषा:

आयात org.hibernate.dialect.Oracle10gDialect;

public class ExtendedDialect extends Oracle10gDialect{ 
    public ExtendedDialect() 
    { 
      super(); 
      registerKeyword("over"); 
      registerKeyword("partition"); 
    } 
} 

एक बार इस वर्ग अपने classpath पर है, तो आप मूल बोली की यह बजाय का उपयोग करने के (इस मामले Oracle10gDialect में) हाइबरनेट बताने के लिए की आवश्यकता होगी।

 <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="databasePlatform" value="path.to.dialect.ExtendedDialect" /> 
      </bean> 
     </property> 

तो फिर तुम से अधिक उपयोग कर सकते हैं और विभाजन @Formula एनोटेशन, @Where एनोटेशन और में: मुझे यकीन है कि जो चौखटे प्रयोग कर रहे हैं, लेकिन वसंत के मामले में, आप LocalContainerEntityManagerFactoryBean के अंतर्गत निम्नलिखित संपत्ति का उपयोग कर सकते नहीं कर रहा हूँ हाइबरनेट को भ्रमित किए बिना अन्य हाइबरनेट विशेषताएं।