如何使用FreeMarker将表添加到Liferay中的数据库?

时间:2015-11-25 11:22:32

标签: liferay liferay-6 freemarker

我想使用 FreeMarker 在我的数据库中添加一个表格。 我尝试在模板中使用ExpandoTableLocalServiceUtil类:

<#assign expandoTable = staticUtil["com.liferay.portlet.expando.service.ExpandoTableLocalServiceUtil"] />

然后我尝试添加表格:

<#assign table = expandoTable.addTable(theme_display.getCompanyId(),"", "MYTABLE") />

但是没有添加表格。

我也试过这种方式:

${expandoTable.addTable(theme_display.getCompanyId(),"", "ANOTHER-TABLE")}

我得到了这个错误:

Template processing error: "Method public static 
com.liferay.portlet.expando.model.ExpandoTable
com.liferay.portlet.expando.service.ExpandoTableLocalServiceUtil.addTable(long,java.lang.String,java.lang.String) throws
com.liferay.portal.kernel.exception.PortalException,com.liferay.portal.kernel.exception.SystemException threw an exception"

    The problematic instruction:
    ----------
    ==> ${expandoTable.addTable(theme_display.getCompanyId(),"", "ANOTHER-TABLE")} [on line 22, column 1 in eventi-theme_SERVLET_CONTEXT_/templates/portal_normal.ftl]
    ----------

    Caused by: com.liferay.portlet.expando.DuplicateTableNameException: {tableId=0}

1 个答案:

答案 0 :(得分:3)

Expando API不会创建数据库级表,而是创建虚拟表。检查您的数据库,您将找到几个“Expando”表。它们将包含您的所有数据。 Expando-API的重点在于您可以扩展数据模型,而无需在数据库上进行任何新的DDL级操作(例如CREATE TABLE)。

如果你想创建单独的表,只需这样做 - 但不要使用Expando。

正如DuplicateTableNameException所示,您的表格已添加。

允许一个架构评论:我看到freemarker(至少在典型用途中)而不是扩展Liferay的UI级别选项,并且通常期望这种操作而不是在后端组件而不是前端。