W jaki sposób możemy pobrać podmioty liferay za pomocą wyszukiwarki niestandardowej przy użyciu niestandardowego kodu SQL?Jak pobrać encję liferay za pomocą wyszukiwarki niestandardowej w niestandardowym portlecie wtyczki?
Poniżej moje zapytanie SQL napisany w
default.xml
( mam okrojone zapytanie do minimum tak, że logika pozostaje prosty. Ponieważ zawiera kilka funkcji i przyłącza nie mogliśmy skorzystaćDynamicQuery
API)SELECT grp.* FROM Group_ WHERE site = 1 AND active_ = 1 AND type_ <> 3
odpowiedniego kodu w
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); }
Powyższy kod nie zadziała, ponieważ klasa GroupImpl
jest obecna w portal-impl.jar
, a tego słoika nie można używać w niestandardowym portlecie.
Próbowałem też za pomocą sqlQuery.addEntity("Group_", PortalClassLoaderUtil.getClassLoader().loadClass("com.liferay.portal.model.impl.GroupImpl"))
Ale powyższy kod wyrzuca wyjątek:
com.liferay.portal.kernel.exception.SystemException:
com.liferay.portal.kernel.dao.orm.ORMException:
org.hibernate.MappingException:
Unknown entity: com.liferay.portal.model.impl.GroupImpl
Ale ten sam kod działa dla naszego niestandardowym podmiotu, jeżeli piszemy sqlQuery.addEntity("MyCustomGroup", MyCustomGroupImpl.class);
.
Dzięki
Czy to wywołanie closeSession na bloku finally zamknie tę sesję? Spojrzałem na kod liferay i znalazłem, że używa on sessionFactory wyszukiwarki, aby zamknąć sesję, stąd moje pytanie. –
@ user1316487 Myślę, że powinno to być 'sessionFactory.closeSession (session)' w tym przypadku. Dziękuję za wskazanie tego. –