1

所以这里的情况。我想将来自我们之前网站的“旧”新闻添加到我们新 Liferay 6.1 网站上的资产发布者 portlet 中。问题是我希望它们显示出来,就好像我过去添加了它们一样。

所以,我想,修改它有多难createDate?我已经能够直接访问 MySQL 数据库并在文章对象的createDate字段上执行更新。但是,无论清除缓存、重新索引搜索索引和重新启动 Liferay,它似乎都不会传播到我的 Liferay 部署中。createDate尽管数据库将其显示为我已将其更改为的值,但Web 内容仍保持其“原始” 。

这是我使用的查询:

mysql> UPDATE JournalArticle SET createDate='2012-03-08 15:17:12' WHERE ArticleID = 16332;

从那以后,我了解到直接操作数据库是一个禁忌,因为数据库/Liferay 的动态并不像 Liferay 执行查找那样直接。所以看起来我可能需要使用 Liferay API,即,setCreateDate如此处所示

但我完全不知道在哪里以及如何利用 API。我是否需要创建一个仅用于使用此 API 调用的虚拟 portlet?或者我可以在运行我的 Liferay 部署的服务器上的某处创建一个 .java 文件并运行它以利用此方法吗?

我只有 15 篇文章需要这样做。我可以通过引用 ArticleID 和 GroupID 找到它们。

任何帮助将不胜感激。我已经grep对 Liferay 部署进行了测试,发现setCreateDate它在知识库 portlet 内的 .java 文件中被大量使用,但我不知道如何在不创建 portlet 的情况下直接使用它们。

另一方面,如果有人知道如何让我的数据库传播它对 Liferay 部署的更改,即使我知道这是一个肮脏的 hack,那可能是最简单的。

谢谢; 对此,我真的非常感激。

4

2 回答 2

3

使用 Liferay API 当然是更清晰和更好的方法,但是对于只有 15 篇文章,我会尝试直接通过数据库进行更改。

我检查了数据库,似乎 Liferay 将数据存储在这些表中:JOURNALARTICLEASSETENTRY.

尝试更改这两个表中的创建日期。

然后重新加载缓存:控制面板 -> 服务器管理 -> 清除数据库缓存。

于 2012-05-09T19:07:34.953 回答
0

您可以为应用程序启动事件编写挂钩。这样,每当 liferay 首次启动时,它都会根据需要更改创建日期。稍后,如果您想卸下挂钩,则可以轻松完成。请参阅此处了解如何创建和部署钩子。

http://www.liferay.com/community/wiki/-/wiki/Main/Portal+Hook+Plugins

此外,即使对于 1 个值/文章,也不建议更改数据库本身。始终使用 Liferay 提供的服务 api 进行修改。

于 2012-05-11T11:12:03.383 回答