Özel SQL kullanarak özel bulucu aracılığıyla liferay varlıkları nasıl alabiliriz? TakipÖzel eklenti portletinde özel bulucu aracılığıyla liferay varlık nasıl alınır?
mantık basit kalmayacak şekilde birkaç fonksiyonları dahil beri. Minimumda sorgu aşağı kesilmiş olan
default.xml
( yazılmış benim sql sorgusu ve bizDynamicQuery
API kullanamadı katılır):SELECT grp.* FROM Group_ WHERE site = 1 AND active_ = 1 AND type_ <> 3
ilgili kod
MyCustomGroupFinderImpl.java
içinde: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); }
Yukarıdaki kod sınıfı portal-impl.jar
sınıfında mevcut olduğundan ve bu jar özel portlette kullanılamaz.
sqlQuery.addEntity("Group_", PortalClassLoaderUtil.getClassLoader().loadClass("com.liferay.portal.model.impl.GroupImpl"))
kullanarak çalıştı Ama bu yukarıdaki kod istisna atar:
com.liferay.portal.kernel.exception.SystemException:
com.liferay.portal.kernel.dao.orm.ORMException:
org.hibernate.MappingException:
Unknown entity: com.liferay.portal.model.impl.GroupImpl
Ama sqlQuery.addEntity("MyCustomGroup", MyCustomGroupImpl.class);
yazarsanız aynı kod, bizim özel varlık için çalışıyor.
Teşekkür
Bu sonuncu bloktaki closeSession çağrısı bu oturumu kapatır mı? Liferay koduna baktım ve soruyu kapatmak için bulucunun sessionFactory uygulamasını kullandığını gördüm. –
@ user1316487 Bu durumda "sessionFactory.closeSession (session)" olması gerektiğini düşünüyorum. Bunu işaret ettiğin için teşekkürler. –