在Liferay中删除多行

时间:2019-04-11 06:31:27

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

我有一个名为xyz的表,其中包含各种记录

enter image description here

service.xml具有以下提到的条目

<entity name="xyz" local-service="true" remote-service="true" cache-enabled="true" json-enabled="true">
        <column name="sno" type="int" primary="true" id-type="identity"></column>
        <column name="name" type="String"></column>
        <column name="address" type="String"></column>
        <column name="userid" type="int"></column>

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

现在我要删除所有具有用户ID 10的用户

使用服务生成器,我们可以按照以下步骤进行操作

List<xyz> xyzList = XyzLocalServiceUtil.findbyuserid(10);
if(xyzList!=null && !xyzList.isEmpty()){
    for (xyz xy : xyzList) {
      xyzListLocalServiceUtil.deleteXyz(xy.getSno());
    }
}

但是我想一次性删除所有行,就像执行下面提到的查询一样

delete from xyz where userid =10;

Liferay Service Builder相当于什么?

我正在使用liferay-6.2-ce-ga3

2 个答案:

答案 0 :(得分:2)

在service.xml中声明查找程序时,服务构建器过程还将基于同一查找程序生成delete方法。

搜索,您将找到一个XyzPersistence.deletebyuserid()方法

您可以在XyzLocalServiceImpl中构建一个新方法来调用持久性层中的删除ant service-builder,然后在localservice层中进行大规模删除。

答案 1 :(得分:0)

通过查询批量删除是不可能的(据我所知)。原因是liferay通常具有(允许)用于删除实体回调的钩子。另外,其中包含一些查找器缓存,可能无法正确跟踪这些批量删除。 您应该在* ServiceImpl中实现一个自定义的批量删除方法,该方法可以处理一次交易中的那些批量删除(迭代删除)。