liferay 7 将模型从 MVCPorlet 插入数据库

liferay 7 insert model to database from MVCPorlet

我正在尝试使用来自服务构建器的 Util class 在 MVCPortlet 中插入一个新模型。

我有从服务生成的 EmployeeLocalServiceUtil。我能够成功地将新模型插入数据库,但我发现增量 ID 始终为 0。我看到了一些 post 介绍 EmployeeLocalServiceUtil.increment() 方法,但我发现我的生成 ServiceUtil [=29] 中不存在此方法=].

我按照一些post在service.xml的实体中添加id-type="increment",在buildService之后我发现increment()方法仍然不存在。

有什么想法吗?

EmployeePortlet.java

package com.webster.employee.portlet;

import com.webster.employee.constants.EmployeeConstant;
import com.webster.employee.constants.EmployeePortletKeys;
import com.webster.model.Employee;
import com.webster.model.ThemeBuilder;
import com.webster.service.EmployeeLocalServiceUtil;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.theme.PortletDisplay;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.WebKeys;

import java.io.IOException;
import java.util.List;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.Portlet;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import org.osgi.service.component.annotations.Component;

/**
 * @author admin
 */
@Component(
    immediate = true,
    property = {
        "com.liferay.portlet.display-category=category.sample",
        "com.liferay.portlet.instanceable=true",
        "javax.portlet.display-name=employee Portlet",
        "javax.portlet.init-param.template-path=/",
        "javax.portlet.init-param.view-template=/view.jsp",
        "javax.portlet.name=" + EmployeePortletKeys.Employee,
        "javax.portlet.resource-bundle=content.Language",
        "javax.portlet.security-role-ref=power-user,user"
    },
    service = Portlet.class
)
public class EmployeePortlet extends MVCPortlet {

    @Override
    public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
            throws IOException, PortletException {

        try {

            ThemeDisplay themeDisplay= (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);
            PortletDisplay portletDisplay= themeDisplay.getPortletDisplay();
            String portletId= portletDisplay.getId();

            Employee employee = EmployeeLocalServiceUtil.findEmployeeByPortletId(portletId);

            if(employee==null){
                employee = EmployeeLocalServiceUtil.createEmployee(0);
                employee.setPortlet_id(portletId);
                employee.setSettings("");               
                employee = EmployeeLocalServiceUtil.addEmployee(employee);
                _log.info("DEV TEST employee is created = "+employee.getId());
            }else{
                _log.info("employee was exist = "+employee.getId());
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            _log.error(e.toString());
        }

        super.doView(renderRequest, renderResponse);
    }

    private Log _log = LogFactoryUtil.getLog(EmployeePortlet.class);

}

Service.xml

<entity name="Employee" local-service="true" remote-service="false" table="employee">
        <column name="id" type="int" primary="true" id-type="increment"></column>
        <column name="portlet_id" type="String"></column>
        <column name="settings" type="String"></column>
    </entity>

您是否尝试过将 CounterLocalServiceUtil 与您的 Employee.class 一起使用?可能会解决您的问题。

不需要 .increment() 方法。我删除 increment() 并使用以下代码,

employee = EmployeeLocalServiceUtil.createEmployee(0);

并配置 id-type=increment 和 运行 构建服务。

<column name="id" type="int" primary="true" id-type="increment"></column>

我发现inserted Employee record id是每笔交易加1。