【问题标题】:How to get a Text type instead of String type in liferay service如何在 liferay 服务中获取文本类型而不是字符串类型
【发布时间】:2018-09-05 22:07:37
【问题描述】:

假设你的 service.xml 中有这种实体

<entity name="Answer" local-service="true" remote-service="true">
    <!-- PK fields -->
    <column name="answer_id" type="long" primary="true" />
    <!-- Other fields -->
    <column name="user_id" type="long" />
    <column name="answer" type="String" />
    <column name="date_answered" type="Date" />
</entity>

查看thisthis 之类的帖子,我的理解是,使用Liferay 6 Service Builder,您只能指定类型String 而不能指定Text。如果要使用 Text 类型,则必须手动修改生成的 SQL 脚本。看来你也可以像这样编辑portlet-model-hints.xml文件

<field name="answer" type="String">
    <hint name="max-length">5000</hint>
</field>

在这种情况下,生成的 SQL 文件中的字段类型将设置为“TEXT”。

但是,如果您需要将“答案”字段从字符串更新为文本字段,并且已经按照第一个模式生成了表格,该怎么办?

感谢您的回答

【问题讨论】:

    标签: hibernate liferay liferay-6 database-migration


    【解决方案1】:

    理想情况下,当您对 service.xml 进行一些更改时,它应该自动更改数据库表。

    1) 尝试取消部署 portlet 2)清除工作和临时文件夹 3)重启服务器 4) 然后重新部署portlet

    注意:更新 portlet-model-hints.xml 是正确的方法,而不是更新 sql 文件。

    希望对你有帮助。

    【讨论】:

    • 谢谢,我已经做了所有这些(我已经习惯了这个过程!)但是由于某种原因它没有更新数据库。也许是因为它已经包含数据?这很奇怪,因为我认为在 service.properties 文件中增加内部版本号(即在您运行 ant build-service 之后)会触发架构更新......但不是。还是谢谢!
    • 即使它包含数据,它也会触发表的更新,想知道为什么它没有发生在你身上。您可以尝试在 service.xml 中添加另一列并查看它是否有效?或更改列的名称以查看它是否有效?这样您就可以确定它根本没有更新,或者它只是没有改变有数据的列的容量。
    • 谢谢普拉卡什。它没有更新数据库,尽管 service.properties 和 tables.sql 文件都已更新。
    【解决方案2】:

    在这种情况下,从 tables.sql 中删除所有条目,并在更新字段后重建您的服务。

    【讨论】:

    • tables.sql 得到了更新,但是当我部署 portlet 时,数据库模式没有改变。我需要放下桌子,还是有更“优雅”的方式?
    • 在这种情况下,首先尝试重新启动您的服务器,如果这对您不起作用,则删除表。
    • 看来只重启服务器是不行的。我发现只是放弃表格非常激进......无论如何谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 2020-02-23
    • 1970-01-01
    • 2019-09-06
    • 2022-01-02
    • 2014-01-01
    相关资源
    最近更新 更多