【发布时间】:2014-07-28 15:59:13
【问题描述】:
我们如何使用自定义 SQL 通过 custom-finder 获取 liferay 实体?
-
以下是我用
default.xml编写的sql查询(我已将查询缩减到最低限度,以便逻辑保持简单。由于它包含一些函数和连接,我们无法使用DynamicQueryAPI ):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 中,并且这个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);,同样的代码也适用于我们的自定义实体。
谢谢
【问题讨论】:
标签: sql service liferay liferay-6 builder