我们如何使用自定义 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
并且此 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);
.
谢谢