liferay-7 - 有没有办法在 liferay 7.1 中为 DynamicQuery 中的表设置别名
问题描述
我想在 Liferay 7.1 中有别名的 MySQL 数据库上执行查询,所以我更喜欢动态查询的方式
我的查询:
SELECT id_, groupId, articleId, urlTitle FROM LRCXCHTASK.JournalArticle where version= (select max(ja.version) from LRCXCHTASK.JournalArticle ja where ja.articleId = LRCXCHTASK.JournalArticle.articleId );
为此我已经完成了代码:
DynamicQuery articleSubDynamicQuery = DynamicQueryFactoryUtil.forClass(JournalArticle.class, "articleSub")
.add(PropertyFactoryUtil.forName("articleSub.articleId").eqProperty("articleParent.articleId"))
.setProjection(ProjectionFactoryUtil.max("articleSub.version"));
DynamicQuery articleParentDynamicQuery = DynamicQueryFactoryUtil.forClass(JournalArticle.class, "articleParent")
.add(PropertyFactoryUtil.forName("version").eq(articleSubDynamicQuery))
.setProjection(ProjectionFactoryUtil.property("id"))
.setProjection(ProjectionFactoryUtil.property("articleId"))
.setProjection(ProjectionFactoryUtil.property("groupId"))
.setProjection(ProjectionFactoryUtil.property("urlTitle"));
List<Object[]> journalArticleIdsList = JournalArticleLocalServiceUtil.dynamicQuery(articleParentDynamicQuery);
我想要列表,但它会抛出 classNotFound JournalArticleImpl 异常
如果我使用
DynamicQuery articleSubDynamicQuery2=JournalArticleLocalServiceUtil.dynamicQuery();
没有类加载器问题,但使用此方法我无法在表上设置别名,这是执行我的查询所必需的
解决方案
由于 Liferay 7.x OSGI 模块化,如果您使用DynamicQueryFactoryUtil会抛出java.lang.ClassNotFoundException: com.liferay.journal.model.impl.JournalArticleImpl因为JournalArticle类在公共 API 模块中,但JournalArticleImpl类在私有 Impl 中模块,因此休眠代码无法找到该类。
如果你使用 Liferay 服务提供的 dynamicQuery 方法,你不会有这个问题,因为它的实现与 JournalArticleImpl 在同一个类加载器中。
尝试将DynamicQueryFactoryUtil.forClass({className}.class)替换为
{className}LocalServiceUtil.dynamicQuery()
这将避免类加载器问题
如果是 JournalArticle,请将 DynamicQueryFactoryUtil.forClass(JournalArticle.class, ....) 替换为: JournalArticleLocalServiceUtil.dynamicQuery()
更多信息请参见 Liferay 论坛:
推荐阅读
- html - 添加容器时未加载 XML 视图的内容
- php - 如何使用 eloquent 从存储在数据库中的 json 中删除一个项目?
- sql-server - 如何删除 azure sql server 并仅保留无服务器数据库副本
- android - Android Animation 重叠底部导航控制栏
- reactjs - 如何解决是指一个值,但在这里被用作一个类型。你的意思是'typeof DatePicker'吗?
- javascript - 如何根据代码是在实时网站还是本地主机上运行代码?
- typescript - 如何在 TypeScript 中键入提示特定的常量字符串?
- c++ - 如何支持在 C++ 的异常处理宏中使用流?
- mysql - 在原始 mysql 中编写 Eloquent 查询
- django - collectstatic 收集静态文件,但它们没有加载到网页上