हम कस्टम एसक्यूएल का उपयोग कर कस्टम-फाइंडर के माध्यम से जीवनभर इकाइयों को कैसे ला सकते हैं?कस्टम प्लगइन पोर्टलेट में कस्टम-खोजक के माध्यम से जीवनकाल इकाई कैसे प्राप्त करें?
के बाद मेरी एसक्यूएल में
default.xml
( मैं न्यूनतम करने के लिए क्वेरी कांट छांट कर दिया है ताकि तर्क सरल बनी हुई है। चूंकि यह कुछ कार्यों शामिल लिखा क्वेरी है और मिलती है हमDynamicQuery
एपीआई का उपयोग नहीं कर सकता है):SELECT grp.* FROM Group_ WHERE site = 1 AND active_ = 1 AND type_ <> 3
MyCustomGroupFinderImpl.java
मेंप्रासंगिक कोड:
Session session = null; try { session = openSession(); // fetches the query string from the default.xml String sql = CustomSQLUtil.get(FIND_ONLY_ACTIVE_SITES); SQLQuery sqlQuery = session.createSQLQuery(sql); sqlQuery.addEntity("Group_", GroupImpl.class); // sqlQuery.addEntity("Group_", PortalClassLoaderUtil.getClassLoader().loadClass("com.liferay.portal.model.impl.GroupImpl")); return (List<Group>) QueryUtil.list(sqlQuery, getDialect(), 0, QueryUtil.ALL_POS); } catch (Exception e) { throw new SystemException(e); } finally { closeSession(session); }
यह उपरोक्त कोड GroupImpl
वर्ग portal-impl.jar
में मौजूद नहीं है और यह जार कस्टम पोर्टलेट में उपयोग नहीं किया जा सकता है।
मैं भी sqlQuery.addEntity("Group_", PortalClassLoaderUtil.getClassLoader().loadClass("com.liferay.portal.model.impl.GroupImpl"))
उपयोग करने की कोशिश लेकिन यह ऊपर कोड अपवाद फेंकता है:
com.liferay.portal.kernel.exception.SystemException:
com.liferay.portal.kernel.dao.orm.ORMException:
org.hibernate.MappingException:
Unknown entity: com.liferay.portal.model.impl.GroupImpl
लेकिन एक ही कोड हमारे कस्टम इकाई के लिए काम करता है, अगर हम sqlQuery.addEntity("MyCustomGroup", MyCustomGroupImpl.class);
लिखें।
धन्यवाद
क्या वह बंद होगा आखिरकार उस सत्र को बंद करने पर सत्र कॉल? मैंने लाइफरे के कोड को देखा और पाया कि यह सत्र का उपयोग करने के लिए खोजक का सत्र का उपयोग करता है इसलिए मेरा प्रश्न। –
@ user1316487 मुझे लगता है कि यह इस मामले में 'sessionFactory.close सत्र (सत्र)' होना चाहिए। यह बात बताने के लिए धन्यवाद। –