在liferay服务构建器中删除特定字段值的记录

时间:2016-02-22 16:42:10

标签: liferay liferay-6 liferay-service-builder

我想使用字段名称删除特定记录

表:虚拟实体

  • 字段ID
  • 字段名称

    public void deleteLocation(req, res){
    String getLocationName = request.getParameter("locationName");
    Location locationToDelete = new LocationImpl();
    locationToDelete.setLocationName(getLocationName);
    LocationLocalServiceUtil.deleteLocation(locationToDelete);
    }
    

它没有向我显示任何错误,但记录没有被删除。请把我解雇。

2 个答案:

答案 0 :(得分:1)

如果要按ID删除元素,可以通过" LocalServiceUtil.delete(id)"来实现。 如果你想删除除id以外的其他字段的元素,你需要为它做一个自定义查询,你可以在门户网站soruce中搜索包含这个例子的文件:portal.xml:

<sql id="com.liferay.portal.service.impl.ResourceBlockLocalServiceImpl.deleteResourceBlock">
        <![CDATA[
            DELETE FROM
                ResourceBlock
            WHERE
                (referenceCount <= 0) AND
                (resourceBlockId = ?)
        ]]>
    </sql>

您可以在此处查看如何实施自定义查询:

https://dev.liferay.com/develop/tutorials/-/knowledge_base/6-2/developing-custom-sql-queries

答案 1 :(得分:1)

实现此目标的最简单方法是在<finder>中为该特定字段添加service.xml节点,如下所示(Location是您的实体名称,name是您的字段名称和Nameservice.xml)中的finder条目名称和构建服务:

<column name="name" type="String" />

<finder name="Name" return-type="Collection">
    <finder-column name="name" />
</finder>

成功构建后,它将根据该列在您的服务中创建CRUD操作。现在,您可以在LocationUtil.java中找到以下方法:

findByName,
removeByName,
countByName,

LocationLocalServiceImpl.java中创建以下(新)方法:

public void deleteLocationsByName(String name){
    try{
        LocationUtil.removeByName(name);
    }catch(Exception ex){
        // log your exception
    }
}

同样,在构建服务时,此方法可以在LocationLocalServiceUtil.java的操作类中使用,您可以在其中调用它:

public void deleteLocation(req, res){
    String locationName = request.getParameter("locationName");
    LocationLocalServiceUtil.deleteLocationsByName(locationName);
}

就是这样,您已经为您的服务添加了自定义查找器方法。