ฉันจะเพิ่มตารางลงในฐานข้อมูลใน Liferay ด้วย 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}

person Mustapha Aoussar    schedule 25.11.2015    source แหล่งที่มา
comment
และคุณได้เห็น DuplicateTableNameException?   -  person Tobias Liefke    schedule 25.11.2015


คำตอบ (1)


Expando API ไม่ได้สร้างตารางระดับฐานข้อมูล แต่เป็นตารางเสมือน ตรวจสอบฐานข้อมูลของคุณแล้วคุณจะพบตาราง "Expando" หลายตาราง พวกเขาจะมีข้อมูลทั้งหมดของคุณ จุดรวมของ Expando-API คือคุณสามารถขยายโมเดลข้อมูลได้โดยไม่ต้องดำเนินการระดับ DDL ใหม่ (เช่น CREATE TABLE) บนฐานข้อมูล

หากคุณต้องการสร้างตารางแยกกัน ก็แค่ทำ แต่อย่าใช้ Expando

และดังที่ DuplicateTableNameException แสดง ตารางของคุณได้ถูกเพิ่มเข้าไปแล้ว

อนุญาตความคิดเห็นทางสถาปัตยกรรมหนึ่งรายการ: ฉันเห็น freemarker (อย่างน้อยในการใช้งานทั่วไป) แทนที่จะเป็นตัวเลือกระดับ UI เพื่อขยาย Liferay และโดยทั่วไปจะคาดหวังการดำเนินการประเภทนี้ในองค์ประกอบแบ็กเอนด์มากกว่าในส่วนหน้า

person Olaf Kock    schedule 26.11.2015