我们如何使用自定义的SQL获取通过自定义的Liferay取景实体?
以下是我写的SQL查询
default.xml
( 这样的逻辑仍然很简单我已经下调查询到最低限度由于它包含的一些功能,并加入我们不能使用。DynamicQuery
API):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
和该罐不能在自定义portlet使用。
我使用也尝试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);
。
谢谢